首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

unity animator的使用心得

Animator 用法总结

Animator是Unity官方新出的动画机,可以替代Animation使用.

Animator 中Layers的运用

在一次动画控制中可能会遇到这种情况: 你需要对同一个对象,同时做多个动作操作,打个比方,一个人有两只手,两只脚, 动画Clip有四套,分别是控制左手伸出,右手伸出,左脚伸出,右脚伸出的动作,互不干扰,正常情况,你可以在这个人身上挂一个Animator,把上述的动作连线控制, 你可以让这个人伸出左手,接着伸出右手,动作是依次执行的,但你不能让他们一同执行.想要让这些动作一同执行,你需要用到Layers,把这些动作放在不同的层里面.每个层的执行就是独立.

可以看到添加一个新层Cion,右上角有个设置按键, 可以调节它的Weight,Mask,Blending,Sync,IK Pass,

Weight代表这一层的权重,数值越到,越听这一层的使唤, Blending有两个选项:Override和Addditive,一个是复写,一个是混合.顾名思义,复写是把原先冲突的动作覆盖,混合是保留其他层的动作.

当你想要 伸出左手的同时也伸出右手, 你需要新建一个层, 把这一层权重设为1,Blending设为Override,这样就能同时执行.

当你对UI进行K帧动画,也要同时执行,你需要把动作Clip,放到初始位置,以便界面进入时就能到达这个位置,否则它会过渡一个空动作,再过来,这样画面会有延迟,UI动作有复写的状况,覆盖是发生在动作执行完时才会改变UI状态,所以把K的帧尽可能的短2,瞬间到位.

SetTrigger遇到的坑

在项目进行时,需要频繁对动画状态进行切换,由于不是单纯的来回切换,所以我没有采用Bool来控制,使用了trigger, 频繁触发 trigger需要做复位处理

JumpUp到JumpDown是 trigger 条件 upToDown(A), (没有ExitTime)

JumpDown到JumpUp2是 trigger 条件 downptoUp(B),(没有ExitTime)

JumpUp2到JumpUp是播放完自然过渡.(有ExitTime)

对动画做如下操作:

当前处于JumpUp,触发A,然后接着触发B,

按照一般逻辑

动画应当是 JumpUpJumpDownJumpUp2JumpUp结束.

然后实际 情况是JumpUpJumpDownJumpUp2JumpUpJumpDownJumpUp2JumpUp,会多执行动画,并不需要触发A或者B.

究其原因是,当一段动画AClip正在播放触发trigger:A过渡到动画BClip,然后在很短的时间内触发B,ClipB过渡到CClip,这时 A的状态并未复位,依旧是触发状态,当CClip回到AClip时,你并不需要主动触发A, A依旧是生效的, 所以会又自动进入到BClip,这样就和我们想要的状态不符了.

解决这个问题有两个办法

在下一条触发条件前 将一条触发清除掉.

使用Bool触发

代码使用第条的办法

void FrameDisDiff()

{

oldPos = newPos;

newPos = transform.position;

dev = newPos - oldPos;

}

void DownToUpAnim()

{

if (_animator.GetCurrentAnimatorStateInfo(0).IsName("JumpDown") && dev.y > 0)

{

_animator.ResetTrigger("upToDown");

_animator.SetTrigger("downToUp");

}

}

void UpToDownAnim()

{

FrameDisDiff();

if (_animator.GetCurrentAnimatorStateInfo(0).IsName("JumpUp") && dev.y

{

_animator.ResetTrigger("downToUp");

_animator.SetTrigger("upToDown");

}

Debug.Log("dev" + dev);

}

Exit的使用方式

当一个Clip与Exit连接,如果不给定条件,Clip播完后,会到Exit瞬间到 Entry 到默认的Clip动画.

如果给定一个条件,那则需要触发.

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200501A0079200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券