【问题标题】:Should state code be handled in the Controller class or in the Pawn class in unrealscript?状态代码应该在控制器类中处理,还是在 unrealscript 中的 Pawn 类中处理?
【发布时间】:2012-06-12 23:37:10
【问题描述】:

我正在将 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 中吗?这个逻辑应该怎么处理?谢谢!

【问题讨论】:

    标签: state unreal-development-kit unrealscript


    【解决方案1】:

    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;
        }
    }
    

    【讨论】:

    • 我的问题是为什么物理和动画代码在Controller而不是Pawn中。我应该将我的 StartSprint、StopSprint 等函数和变量放入 Controller 中,因为它已经具有移动状态?
    • 我喜欢将 PlayerController 类视为一种指导输入的方法,并且仅存储与 Pawn 不完全相关的控制相关事物,例如 HUD、菜单、必须保留的持久状态死后,那种性质的东西。至于为什么会这样,是因为有时 Epic 写代码时独角兽血统很高。
    • 哈哈哈,这让我很开心!我将把代码放在 Pawn 类中,因为这实际上是有道理的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 2022-01-17
    • 1970-01-01
    • 2017-01-29
    • 2012-07-18
    • 2013-05-20
    • 1970-01-01
    • 2010-12-20
    相关资源
    最近更新 更多