Unreal Engine:オーバーラップした武器を自動的に装備する

スポンサーリンク

Weaponクラスの作成


Weapon.hのGENERATED_BODY()以下に下記のコードを入力します。

public:

	AWeapon();

protected:

	virtual void BeginPlay() override;

public:

	virtual void OnOverlapBegin(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) override;

	virtual void OnOverlapEnd(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) override;

void Equip(class AMyCharacter* Char);

Weapon.cppにヘッダーファイルを追加します。

#include "MyCharacter.h"

Weapon.cppのOnOverlapBegin関数に以下のコードを追加します。

Super::OnOverlapBegin(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult);

if (OtherActor)
{
	AMyCharacter* MyChar = Cast<AMyCharacter>(OtherActor);
		if (MyChar)
		{
			Equip(MyChar);
		}
}

OnOverlapEnd関数に以下のコードを追加します。

Super::OnOverlapEnd(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex);

Weapon.cppにEquip関数を定義します。

if (Char)
{
	GetItemMesh()->SetCollisionResponseToChannel(ECollisionChannel::ECC_Camera, ECollisionResponse::ECR_Ignore);
	GetItemMesh()->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Ignore);

	GetItemMesh()->SetSimulatePhysics(false);

	const USkeletalMeshSocket* RightHandSocket = Char->GetMesh()->GetSocketByName("RightHandSocket");
		if (RightHandSocket)
		{
			RightHandSocket->AttachActor(this, Char->GetMesh());
        }
}

全て保存を押して一旦UE4エディタを閉じて、Vistual StudioをCtrl+F5でコンパイルしてUE4エディタを起動します。

スポンサーリンク

ブループリントで武器の設定をする

起動後、Weaponクラスをベースにブループリントを作成します。

作成フォルダにBlueprintフォルダを選択し、名前はここではWeapon_BPにしています。

スケルタルメッシュには、アセットプレビューで使用したソードを割り当てます。

メッシュ設定が終わったらコンパイルと保存を押して、Weapon_BPアイコンをエディタ画面内に引っ張ってきます。位置を調整したら完了です。

スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました