学无止境
曾经我们是不是以为跟粒子系统打交道多的是特效美术?曾经我们是不是以为改变粒子的位置是不是只要设置transform的position?曾经我们程序对粒子系统做的最多的操作是不是只要加载显示就OK了?曾经我们想要一次又一次的播放粒子特效是不是显示隐藏再显示父节点?曾经我们想要改变一下粒子特效的参数是不是先获取ParticleSystem组件然后修改里面的参数?曾经…,现在我才知道原来ParticleSystem有个Emit的接口,来改变粒子发射器。之前对粒子特效理解不深或许因为公司有特效美术,或许因为需求简单,或许自己没深入研究一下,不过亡羊补牢,为时不晚。我们都知道Unity的粒子很耗,能少用就少用,Unity也推出一款新的粒子系统,需要在Unity2018.3的版本之后使用。新的粒子系统是可视化的并且运行在GPU上的粒子系统,性能和效果大幅度提审,不过是基于HDRP的高清渲染管线,这就意味着大多数移动设备可能不支持。Unity还专门为了介绍这个新的粒子系统出了一款FPS的Demo,画质特别高清,有点像守望先锋的赶脚。
场景中会有碰撞阻挡,或者触发器,一般是美术或者策划配置,策划一般是直接配置collider,但为了调试方便,需要显示对应的mesh方便查看防止的位置是否正确,我们可以写个工具来控制生成mesh和删除mesh方便调试使用。
一般就是几种内置的collider,meshcollider、boxcollider、capsulecollider、spherecollider等,我们判断出对应的collider,然后创建unity内置的一些GameObject即可,meshcollider只需要实例化collider的mesh即可。
说到IK(反向动力学),我在上一个足球项目中有用到,比如守门员接球,美术只是提供几种接球动作,例如:跳起接球、蹲下抱球、左扑、右扑,这里左扑和右扑可以优化,设置动画的mirror选项,mirror就好比镜面,如果左边扑救的动画添加上mirror选项就能够有右扑的效果,当然这个不是这篇文章的主讲,简单的讲反向动力学就是设置子关节的位置或者形态反向计算父关节的位置或者形态,例如守门员要实现扑球的动作,预先计算球到球门的位置,然后手关节设置到这个位置,并且设置当前状态到那个位置所需要的时间。再举个栗子,例如吃鸡游戏,我们控制的角色要捡地上的装备,我们只需要将手的位置放置到地面装备上,Unity会在Time.deltime中每一小段时间移动一点位移,最终移动到我们想要移动的位置,Unity中对应的API是SetMarchTarget。Unity中打开动画的IK的操作 Window->Animator打开动画控制器窗口,勾选IK Pass。本文的主要讲解的是如何通过FinalIK插件来实现角色脚掌贴合地面,当然插件中给我们实现的一个样例Grounder,主要就是在角色GameObject上添加上GrounderIK组件即可。
我们当然可以参照Grounder的例子来手动给每个角色模型添加上IK,但这种重复性的机械操作就需要程序来造轮子解决,让配置的工作交给策划,GrounderIK下面的子组件LimbIK需要设置三个Bone节点,分别是大腿根部节点,小腿关节节点,脚掌关键节点,但由于事先没有跟美术商量好,不然的话可以将我们要设置的三个关节点在GameObject特殊标记起来,也由于各个模型的关节名和位置没有统一,所以我下面做的工具就讲这个选择权交给策划,由策划来点击选择这是想要设置的关节点。
我们看一下Final IK的实现脚步贴合地面的效果,原本Robot的脚是不会贴合地面的。