大家好
小弟正在使用Unity上进行2D动作游戏开发
目前在角色的移动 跳跃之类的动作
都是透过计算速度并在update的时候更新
可是许多技能都带有位移的效果
这些位移通常与物理系统并不相关
而且位置的变化需要与动画保持一致
想请问这类型的移动是透过什么方式去处理?
举个例子:
像是升龙拳
在使用的时候角色会向右上方
沿着类似指数函数的路径移动
在这段时间所有移动都是固定的 并且与物理无关
技能结束后的下坠才会回到物理系统计算
不确定是不是常用的方法,不过我会用另一个 Game Object当作玩家真正的位置,然后角色动画只是一个跟着玩家位置跑的另一个 Game Object
不同状态下有个负责更新速度和位置的virtual function(或用switch或其他方法达到等同效果),一般状态下用速度更新位置,特殊状态可以直接更新位置或对速度做客制化更新。另外,除非主打物理模拟且模拟浮动性可接受,负责不建议用泛用型物理引擎处理动作游戏的核心机制,建议用客制特化碰撞侦测不同状态中也可以做短时间animation blend,消除不想要的视觉不连续性
等等,我也不知道我刚刚理解成什么了 XD 如果是平地结构的话直接把下落动画也一起做完,如果有着陆高度问题的话你直接写个加速度公式把人往下移,然后侦测跟地面的碰撞就好了。物理引擎带来的结果不好预期
作者:
wix3000 (痒,好吃)
2018-11-19 02:50:00自己写一个 extension function啊ypublic static float NormalizedTime(this Animator ani)
是包成比较好看的API没错啊,除非能更动Unity底层的anim资料储存模式,那就只能靠重新包装另外,势必要纪录角色位置的意思是?不论是数学式可以表的动态或对anim取样,最少都只需要开始时间吧还有开始位置纪录的意思是说制作客制取样点函式吗?那实质上应该可以用播放特定anim来实作,这个特殊状态就是一个特定anim state这样回头一下,取frame的方式之所以是那样,是因为Unity的动画系统是使用层式状态机模型,用层式模型是为了支援anim blending,为达到圆滑anim的必备模型,而用状态机则是泛用anim系统的常见选择,我认为还算合理啦
推楼上,特殊状态下也可用tween,如果是客制移动曲线,也可override个客制tween
作者:
wix3000 (痒,好吃)
2018-11-19 23:08:00没有什么问题是中介层解决不了的,如果有,就再包一层
作者: NCTU87 (八七) 2018-11-21 21:54:00
推烤鱼
作者: j60708123 (Jokemouth) 2018-11-21 21:58:00
是烤鱼
作者:
QQron (Run)
2018-11-26 01:20:00写一个StateMachineBehaviour,用normalizedTimed控制时间这样就很好对应动画 至于移动方式很多种,不喜欢velocity就直接修改animator.transform.position