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














コメント