使用动画系统时,有两种控制人物移动的方式:
1.使用动画中的位移
好处是:人物的脚步会跟地面贴合,不会出现滑步的问题(人物的移动距离比步子大或者小),控制简单
缺点是:比较依赖动画的制作,程序控制性不高
2.使用代码控制人物的位移
好处:可控性高
缺点:容易出现滑步,控制复杂
修改Animator Controller中的参数:
设置参数的办法是使用SetInteger、SetFloat、SetBool、SetTrigger
bool参数和Trigger参数的区别:
bool参数和trigger参数很像,都是代表布尔值,但是trigger参数只能被设为true,一旦被transition使用,就会自动被设为false。bool类型一般用于持续的状态,比如角色是否趴下。而trigger一般用于使用一次就会恢复的状态,比如开枪,开枪动画播放完以后,会自动恢复到之前的动作
parameter的id:
设置parameter的时候设置的是一个字符串的名称,但是在Unity内部是有一个数字id跟它对应的,使用Animator.StringToHash这个API可以将字符串的参数名转为数字id。使用数字id的代码运行效率会稍微高一些
其他SetFloat、SetBool、SetTrigger都类似,但是唯一不同的是SetFoat还有额外的两个重载方法:
1 | public void SetFloat(string name, float value, float dampTime, float deltaTime); |
dampTime 阻尼时间,deltaTime 时间增量
SetFloat的那个damp用法:
damp翻译过来一般是阻尼的意思,你可以理解为缓行。这样Fload值会渐变过去,而不是一下子变成设置的Float值,这个在有些情况下很有用,比如人物的速度。玩家按下W的时候,应该是一个逐渐从0到最大速度的过程,而不应该一下从0到最大速度,这时候就可以用到damp。
效果为如下公式:
总结:
- Animator中可以设置参数,用来控制Transition的变化
- Has Exit Time也是transition切换的一个条件,只有transition的所有条件都满足时才会进行切换
- 在代码中可以使用Animator类中的SetXXX方法控制参数,进而控制状态的转换
关于生成Layer层的写法:
写法1:
1 | var layers = productController.layers; |
写法2:
1 | var layers = productController.layers; |
写法1能够正常导出显示并序列化,但是写法2可以导出显示但无法正常序列化