Unreal Engine:ライフル銃をエイムする

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

void AimingButtonPressed();
void AimingButtonReleased();

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

bAiming(false),
bAimingButtonPressed(false)

設定→プロジェクト設定のEngine項目のインプットを選択してエイミングボタンを設定します。

MyCharacter.cppにAimingButtonをバインドします。

PlayerInputComponent->BindAction("AimingButton", IE_Pressed, this, &AMyCharacter::AimingButtonPressed);
PlayerInputComponent->BindAction("AimingButton", IE_Released, this, &AMyCharacter::AimingButtonReleased);

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

void AMyCharacter::AimingButtonPressed()
{
	bAiming = true;
}

void AMyCharacter::AimingButtonReleased()
{
	bAiming = false;
}

MyAnimInstance.cppのUpdateAnimationProperties関数を以下の変更を加えます。

void UMyAnimInstance::UpdateAnimationProperties(float DeltaTime)
{
	if (MyChar == nullptr)
	{
		MyChar = Cast<AMyCharacter>(TryGetPawnOwner());
	}
	if (MyChar)
	{
		FVector Velocity = MyChar->GetVelocity();
		Velocity.Z = 0;
		Speed = Velocity.Size();
		bIsInAir = MyChar->GetMovementComponent()->IsFalling();
		if (MyChar->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f)
		{
			bIsAccelerating = true;
		}
		else
		{
			bIsAccelerating = false;
		}
		bAiming = MyChar->GetAiming();
	}
}

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

スポンサーリンク

エイミングポーズのオンオフを切り替える

エイミングポーズの入ったステートマシンをキャッシュしてLocoAimと名付けます。

ステートマシンを新規作成してLocoAimingと名付けます。

LocoAimステートマシンをダブルクリックしてLocoとAimの二つのステートを作成し、Locoをダブルクリック、右クリックで検索窓にcachedと入力、LocoAttackを選択します。

Aimingをダブルクリック、右クリックで検索窓にcachedと入力、LocoAimを選択します。

LocoからAimingのトランジションルールをダブルクリックします。

右クリックで検索窓にaimingと入力、Get Aimingを選択、Aimingノードを結果ノードに接続します。

AimingからLocoのトランジションルールをダブルクリックして以下のルールを作成します。

LocoからAimingのトランジションルールをクリックして詳細の継続時間を0.1に変更します。

AimingからLocoのトランジションルールをクリックして詳細の継続時間を0.1に変更します。

LocoAimingを出力ポーズに接続、コンパイルと保存を押します。

これでアイムボタンを押すとアイムするようになります。アイム中に勝手に動くのはアイドルアニメーションのせいなので、嫌な場合はこのアニメーションの動きのある部分のフレームを削除することで解決します。もしくは、動きのないライフル銃を持った時のアイドルステートアニメーションをMixamoで探してくるという手もあります。

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

コメント

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