001_MyMOBA_PC

HUD_PC:

HUDPC::PostRender::Super跳过父类,GFXHUD将不被初使化。

 

PostRender处理光标,逻辑基本在DrawHUD()。

 

ControllerPC通过左键开火,选择HeroPawn,玩家一旦有Pawn,不渲染HUD图像。

 

Controller:

关于状态编程:

状态编程用到入栈和出栈,一旦在用GoToState后,该类就会处在GoTo的那个状态,这种情况下,如果同一个类中有两个(或多个)同名函数,一个在类中,一个在状态中。当需要执行那个函数时,会执行状态中的那个同名函数而不是类中的那个。相反的,就执行类中的同名函数。Auto State的作用就是在没有使用GoToState的情况下让类进入一个状态。

------------------------------------------------------------------------------------------------------------------------------------------------------------------

UDK默认的PlayerController.uc::eventPlayerTick( floatDeltaTime )::PlayerMove(DeltaTime);

PlayerController.uc中不止一个状态,PlayerMove函数也不止一个,默认情况下执行PlayerMove时是在state PlayerWalking::PlayerMove()::ProcessMove()。ProcessMove处理Pawn的移动。(PHYS_Falling,PHYS_Walking,,,,,)

------------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

ControllerPC状态转换逻辑:

Controller相互占有一个Pawn后,Pawn的动画资源设定后就进入Idle姿势,在Controller没有进入PlayerWalking状态时,相机视图可能不会移动和旋转,WASD也是无效的。

处理开火是在PlayerCommanding,处理玩家移动是在PlayerWalking。玩家的移动随时都是要处理的,当玩家想开火时,如果从移动状态进入了PlayerCommanding,玩家可能不会动了。综合考虑,去掉PlayerCommanding状态,开火函数写在类里面。

ControllerPC如何进入PlayerWalking状态,用状态转换,Controller有Auto State:: GotoPlayerWalking无效(未解)。

为了让ControllerPC下的PlayerWalking能像默认Controller那样工作,把默认PlayerController的PlayerMove和PlayerWalking状态下的PlayerMove都是复制到ControllerPC下并改写类中的PlayerMove函数::

functionPlayerMove(floatDeltaTime)

{

    if (IsInState('PlayerWalking'))

    {

    BeginState('PlayerWalking');

    }

    else

    {

    GotoState('PlayerWalking');

    }

}

 

也不明白为什么这样改写了就达到了想要的效果,PlayerTick调用PlayerMove函数的时候就直接调用PlayerWalking状态下的PlayerMove了。

 

Pawn:

Pawn::PostBeginPlay::如果是玩家控制器,Super跳过父类;如果不是玩家控制器,Pawn仍然是AI。

GameInfor→Possese的时候,如果是玩家控制器就占用Pawn。

不过这个逻辑似乎没用,就算先是AI,Controller改写后的Posses确定是玩家后Unposses和Posses会重新占有Pawn。

 

附加内容(扩展):

修饰符:

HUDPC::protected  function  ProcessCommands() ,类的修饰符不允许外部调用该函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值