毕设之旅第1站---角色控制2

角色跳跃,翻滚,前冲,RootMotion


继续补充角色的动作

在“Leevy”状态机里,Base Layer层,拖入“jump”动画。Parameters里新增 Trigger,"jump"。

在这里新增加一个判断条件,动作只能在地面上才能进行。因此,增加一个Parameters, bool型的"isGround",后面会进行检测。

从“ground”拉线到“jump”,取消勾选“Has Exit Time”,转态条件为“jump”,“isGround==true”,再拉状态到“ground”,默认即可。

“roll_back”,"rush"动作,操作同“jump”。


脚本控制:

《PlayerKeyInput》:

新增按键,信号

Update():

《PlayerController》:

到此,如果没有“isGround==true”条件,可以控制角色,跳,后翻,前冲。

而且,还有几个问题:

1.只有动作,没有位移。

2.按键累积,连续按两次跳跃键,这个信号会保存下来,依次触发完毕。

3.动作触发时,仍可以控制转向,位移等。


IsGround判断:《OnGroundSensor》

利用官方函数,Physics.OverlapCapsule(),来检测。

添加脚本《OnGroundSensor》:

《PlayerContoller》里添加两个方法接收:


清除累积信号:

在动画上添加Behaviour,在脚本里,有 Enter,Update,Exit,Move,Ik等函数。

在动画执行到改状态时,就会触发该函数。

在“ground”动画上,新增一个Behaviour,《FSMOnClearSignal》:

在base动画时,清除掉累积的Trigger信号。

这样就不会连续按跳跃键,就会跳好多次。而是,每次跳跃完毕,再次按才会触发跳跃。


翻滚时,不可控制角色转向,移动。

继续使用Behavior。新增脚本《FSMOnEnter》《FSMOnExit》《FSMOnUpdate》.

便可以控制该状态下的事件。

“jump” Animation下:

对应《PlayerController》添加函数,OnJumpEnter(),OnJumpExit().

“roll_back”,"rush"同“jump”。


使用动画自带位移

有的动画自带Root Motion冲量,是动画师制作时赋予的,是动作标准的位移量。可以利用这一点。

但是启用了Root Motion后,角色model和Player的位移量因为不一样而发生偏移。解决办法是通过脚本,获得动画的位移,并把它赋值给Palyer。

《RootMotionControl》: 主要函数 OnAnimatorMove().获得animator的位移量,装箱成Object

《PlayerContoller》里接收消息: 拆箱

然后赋值给Player的Rigidbody:

赋值后,清零,接收下一个动画的位移。

OK,OVER。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值