在unity中,3D模型的切换可以使用animator状态机或者代码切换Animator.CrossFade切换函数
使用状态机切换
需要连接各个动画的逻辑关系,并且添加切换参数,设置退出时间,调整切换持续时间等。然后直接使用切换参数SetTrigger等切换。
优点就是直观,方便编辑。缺点就是连线太多,繁琐。
使用API切换
api切换的优点就是不用连线,直接使用代码切换,并且能够实现过渡效果。缺点就是不直观,并且各个动画过渡参数不一样,可能需要配置。
这里有两个API,分别是Animator.CrossFade和Animator.CrossFadeInFixedTime
两个api功能一样,Fixed不同之处在于,其中的参数为固定秒数;CrossFade中的时间,都是基于动画片段的长度归一化设置的。
public void CrossFade(string stateName, float normalizedTransitionDuration, int layer = -1, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f);
stateName:动画名称。切换至目标动画片段
normalizedTransitionDuration:切换持续时间。切换到目标动画,切换过程需要消耗的时间
layer:层。目标动画层
normalizedTimeOffset:时间偏移。切换到目标动画的位置,例如切换到目标状态的0.5(动画50%处)
normalizedTransitionTime:切换时间。不太清楚这个值具体表示什么,(测试了一下,如果近1,则直接到目标状态,没有过渡。近0,则有过渡,其他切换参数生效。有懂的可以给我说说)