0

我正在将 sprint 状态写入我的 UDK 游戏中的自定义 pawn 类。我正在查看 Epic 用于管理状态的示例代码,并且大部分游戏逻辑位于 Controller 类而不是 Pawn 类中。这对我来说似乎倒退了。我最初认为控制器只是处理 AI 和玩家输入,现在我不确定在哪里放置我自己的状态代码。

例如,PlayerController.uc 文件有 PlayerWalking、PlayerClimbing 等,但似乎也改变了 Pawn 的状态:

// 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 状态,我应该将冲刺状态代码放在 Controller 类而不是 Pawn 中吗?这个逻辑应该怎么处理?谢谢!

4

1 回答 1

0

PlayerWalking 和 PlayerClimbing 更多地指的是 Pawns 的物理和动画模式,而不是实际的步行与冲刺。

一种基于状态的简单方法是创建一个派生自 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 回答