Unity笔记-29-ARPG游戏项目-11-完善运动

Unity笔记-29-ARPG游戏项目-11-完善运动

之前的文章已经介绍了如何让人物动起来,但是之前的代码和思路仍然存在一些问题,这里对其进行完善

如何控制运动

如果是对通过对刚体的速度进行控制,那么就必须要考虑到跳跃等动作对垂直方向速度的影响,角色移动如果直接通过赋予速度,那么角色就无法跳跃了。因此,这里我改为使用力来控制,并且为了体现角色运动上的惯性,例如在角色快速跑出悬崖时,下坠的同时需要继续向前运动一段路程而不是直接垂直下落。

对于斜坡运动的考虑

此外当运动的地形为倾斜时,运动方向就不再是水平的了,就需要赋予倾斜的力而非水平的力,这样的设置时因为,角色在走上坡的时候赋予水平的力没有问题,但是角色在走下坡的时候赋予水平的力使得角色速度比较大时,会出现不断下坠的情况,因为时水平移动,但是由于下坡,所以要下坠,因此赋予的力需要更改为倾斜的力,此外由于设置了惯性,角色在以比较快的速度走上坡路时,当角色走到尽头时,会因为惯性导致飞起来的效果,这不是我想要的,因此在角色停止运动或者走到路段尽头的时候需要将速度归零一次,不过这其实并不好判断,因为,停止运动时倒是容易判断,但是走到路段尽头就比较麻烦,完全避免比较困难,因此需要在数值上控制好速度和惯性的保持。

跳跃

跳跃时,需要获得想上的力,并且要获得当前速度的方向力,以达到向前跳的效果,如果速度为0那么就是原地跳跃

这里建议使用协程,如果通过赋予力的方式使角色获得速度,那么这个力必须是持续的,如果只是瞬间的力效果微乎其微又获得因为重力的影响导致这种效果马上就被抵消了,因此执行跳跃指令前要关闭重力,而且跳跃时上升速度和下降速度是会变化的,这里建议使用曲线控制,通过曲线和协程赋予一个相对平滑的合乎逻辑的跳跃运动,因此我们可以把力就理解为赋予的速度大小,一旦力消失,那么速度也就消失,但是这种控制比起直接控制速度有更高的容错。跳跃结束,重新开启重力

对于Force.Mode请参考以下分析

Force.Mode的区别
功能注解:ForceMode为枚举类型,用来控制力的作用方式,有4个枚举成员,在以下举例中均设刚体质量为m=2.0f,力向量为f=(10.0f,0.0f,0.0f)。

(1)ForceMode.Force:默认方式,使用刚体的质量计算,以每帧间隔时间为单位计算动量。设FixedUpdate()的执行频率采用系统默认值(即0.02s),,则由动量定理

f•t=m•v

可得:10*0.02=2*v1,从而可得v1=0.1,即每帧刚体在X轴上值增加0.1米,从而可计算得刚体的每秒移动速度为v2=(1/0.02)*v1=5m/s。

(2)ForceMode.Acceleration:在此种作用方式下会忽略刚体的实际质量而采用默认值1.0f,时间间隔以系统帧频间隔计算(默认值为0.02s),即

f•t=1.0•v

即可得v1= f•t=10*0.02=0.2,即刚体每帧增加0.2米,从而可得刚体的每秒移动速度为v2=(1/0.02)*v1=10m/s。

(3)ForceMode.Impulse:此种方式采用瞬间力作用方式,即把t的值默认为1,不再采用系统的帧频间隔,即

f•1.0=m•v

即可得v1=f/m=10.0/2.0=5.0,即刚体每帧增加5.0米,从而可得刚体每秒的速度为v2=(1/0.02)*5.0=250m/s。

(4)ForceMode.VelocityChange:此种作用方式下将忽略刚体的实际质量,采用默认质量1.0,同时也忽略系统的实际帧频间隔,采用默认间隔1.0,即

f•1.0=1.0•v

参考文章:
https://www.cnblogs.com/jiahuafu/p/6144112.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值