射线:通过该函数可以检测两个是否发生碰撞或者射击类游戏
也即经过avatar之后可以不同角色公用同一个avatar
root motion:是人物动画行走时可以在空间中发生位移
在animator中勾选apply root motion,会自动设置好了动画行走发生位移,不勾选播放动画不发生位移
如果不勾选,我们这样通过脚本方式实现动画位移。在动画的属性中有个curves添加行走速度
在动画机中添加相同参数
在脚本中调用OnAnimatorMove函数,设置移动的位移变化
通过一个一维混合树可以实现向前跑,向左跑(向前跑和左转融合),向右跑(向前跑和右转融合),如果想把向前跑改成从走路到跑步的渐变过程,需要把run动画删去,再添加一个混合树,也即在blend tree里面嵌套一个blend tree,
如果想把向前跑改成从走路到跑步的渐变过程,需要把run动画删去,再添加一个混合树,也即在blend tree里面嵌套一个blend tree,
0.8 ,1.3是跑步的速度,分为走路,慢跑,快跑3个状态,慢跑和快跑都用run动画,只不过设置不同跑步速度就行
在脚本里面用一个时间阻尼系数乘以倒数第二张图blend tree 里的RunFloat即可
在多层状态机中有个weight权重选项,他是指多个状态机效果可以叠加,1表示只有这层作用,其他层没用
当实现前走,左前走,右前走,后走,左后走,又后走可以通过二维混合树实现。把walk速度设成-1就变成了向后走
而在脚本控制的代码比较简单:
2D simple Directional在二维混合树中里面不要再嵌套混合树
2Dfreeform Directional可以在混合树嵌套混合树,比如在混合树向前的分支中再添加一个混合树实现向前走和向前跑
2D freeform cartesian中可以描述非方向的概念,因为2Dfreeform Directional中的x,y参数一般用于方向的应用,2D freeform cartesian中x,y用于其他含义
反向运动学(IK):反映的是一种由手部带到肩部的运动形式,在这个运动中,运动以手部这个自由端为起始,当手部进行运动时会自然的带动固定端肩部的运动。
应用:人物抓枪的动作,拿东西的动作等
通过body mask来开启关闭手和脚的功能,也可以在代码开启关闭,基本用法如下
最后拖动要抓取的物体到脚本的属性参数中,勾选animator的IK pass
位置匹配:比如人攀爬到指定点的动作,调用animator.MatchTarget函数来实现详情参考085讲
一般性动画的处理步骤(非人类骨骼处理过的动画):此时属性选择generic
角色拖动到hierarchy中,关闭apply root motion,与其他物理动画组件关联时选择animate physics,创建动画controller拖动到animator中。在controller中设置好节点或融合动画,通过刚体方式实现角色位移,添加rigidbody组件,创建脚本如图所示:就得到了所要的效果
曲线属性的应用:通过设置曲线属性可以动态设置人物胶囊物体的高度
如果不设置曲线属性,人物向前跳,人物胶囊的高度不会改变,在animator属性下面有个carves曲线,添加曲线
可以把该曲线应用到胶囊物体的高度属性上,在animator动画机里面创建参数名称和curves参数名称一致
核心代码如下:
在onupdate函数中这样写:
随机群体动画:创造出许多物体在同一时间利用随机数发生不同的动作的效果,具体看视频089
character controller是实现人物移动的核心组件
colider组件(碰撞组件)和rigidbody组件(刚体组件)的区别:colider直接的碰撞可以没有rigidbody但是rigidbody之间的碰撞必须有colider组件
碰撞的消息传递:三个函数:
关节:有时需要把两个物体链接起来
Hinge Joint :铰链关节
Fixed Joint:固定关节
Spring Joint:弹簧关节
character Joint:角色关节
configurable Joint:可配置关节
布料系统:
interacvtive cloth:交互式布料
Skinned Cloth:蒙皮布料