0

UDK ゲームのカスタム ポーン クラスにスプリント状態を書き込んでいます。状態を管理するための Epic のサンプル コードを見ていましたが、かなりの量のゲーム ロジックが Pawn クラスではなく Controller クラスにあります。これは私には逆に思えます。私は当初、コントローラは単に AI とプレーヤーの入力を処理するだけだと思っていましたが、今では独自の状態コードをどこに配置すればよいかわかりません。

たとえば、PlayerController.uc ファイルには PlayerWalking、PlayerClimbing などがありますが、ポーンの状態も変更されているようです。

// player is climbing ladder
    state PlayerClimbing
    {

        ignores SeePlayer, HearNoise, Bump;

            event NotifyPhysicsVolumeChange( PhysicsVolume NewVolume )
            {
                if( NewVolume.bWaterVolume )
                {
                    GotoState( Pawn.WaterMovementState );
                }
                else
                {
                    GotoState( Pawn.LandMovementState );
                }
            }
...

スプリント状態は PlayerWalking 状態を無効にする必要があるため、ポーンではなくコントローラー クラスにスプリント状態コードを配置する必要がありますか? そのロジックをどのように処理する必要がありますか? ありがとう!

4

1 に答える 1

0

PlayerWalking と PlayerClimbing は、実際のウォーキングと全力疾走ではなく、ポーンの物理とアニメーション モードについて言及しています。

オフ状態に基づいてこれを行う簡単な方法は、PlayerWalking から派生する PlayerSprinting 状態を作成し、両方の状態で、状態に入ると、GroundSpeed を必要な値に設定することです。

例:

state PlayerSprinting extends PlayerWalking
{
    event BeginState(Name PreviousStateName)
    {
         //coped from UTPawn
        DoubleClickDir = DCLICK_None;
        bPressedJump = false;
        GroundPitch = 0;
        if ( Pawn != None )
        {
            Pawn.ShouldCrouch(false);
            if (Pawn.Physics != PHYS_Falling && Pawn.Physics != PHYS_RigidBody) // FIXME HACK!!!
                Pawn.SetPhysics(Pawn.WalkingPhysics);
        }
        //END UTPawn

        //Ground speed modify
        GroundSpeed=SprintSpeed;
    }
}
于 2012-06-13T17:26:18.103 に答える