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で探してくるという手もあります。
コメント