Unreal Engine:ライフル銃を撃てるようにする

装備したライフル銃を撃てるようにします。コントローラーのファイアボタンを押すと、銃声やマズルフラッシュの視聴覚効果で銃を撃った気になります。とりあえず撃てるだけなので、武器として使えるようにするには、今後色々と付け足していく必要があります。

スポンサーリンク

ライフルにソケットを追加する

Gun_BPのスケルタルメッシュの虫眼鏡ボタンを押します。

スケルタルメッシュを開きます。

スケルトンツリータブを押します。

Muzzleソケットが既に取り付けられています。

スポンサーリンク

銃撃用のアクションマッピングの設定

ライフル用のアクションマッピングを他の武器とは別に用意します。設定→プロジェクト設定の順に選択していきます。

エンジン項目のインプットを選択します。

アクションマッピングの+ボタンを押してアクションマッピングを新たに追加します。

アクション名をFireButtonにし、キー設定はゲームパッドの好きなボタンを割り当てます。

スポンサーリンク

C++でFire関数を作成

Item.hにgetterを記述します。

FORCEINLINE USoundCue* GetOverlapSound() const { return OverlapSound; }
FORCEINLINE UParticleSystem* GetOverlapParticles() const { return OverlapParticles; }

MyCharacter.hのprotectedセクションにいくつか関数を宣言します。

void FireWeapon();
void FireButtonPressed();
void FireButtonReleased();

privateセクションにブール型変数を宣言します。

bool bFireButtonPressed;

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

#include "Sound/SoundCue.h"

コンストラクタに変数のデフォルト値を設定します。

bFireButtonPressed(false)

FireWeapon関数の定義を記述します。

void AMyCharacter::FireWeapon()
{
	if (EquippedGun == nullptr) return;
	const USkeletalMeshSocket* BarrelSocket =
		EquippedGun->GetItemMesh()->GetSocketByName("Muzzle");
	if (BarrelSocket)
	{
		const FTransform SocketTransform = BarrelSocket->GetSocketTransform(
			EquippedGun->GetItemMesh());

		if (EquippedGun->GetOverlapParticles())
		{
			UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), EquippedGun->GetOverlapParticles(), SocketTransform);
		}
	}
	if (EquippedGun->GetOverlapSound())
	{
		UGameplayStatics::PlaySound2D(this, EquippedGun->GetOverlapSound());
	}
}

アクションマッピングをバインドします。

PlayerInputComponent->BindAction("FireButton", IE_Pressed, this, &AMyCharacter::FireButtonPressed);
PlayerInputComponent->BindAction("FireButton", IE_Released, this, &AMyCharacter::FireButtonReleased);

Ctrl+F5でコンパイル後にUE4エディタを立ち上げます。

スポンサーリンク

視聴覚効果を設定する

Gun_BPを開いて検索窓にoverlapと入力して、好きなアセットを選択します。

OverlapSoundとOverlapParticleで使うアセットはマーケットプレースで無料で入手できます。

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

コメント

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