美文网首页Unity游戏开发经验分享
Unity之碰到哪说到哪-ResetTrigger

Unity之碰到哪说到哪-ResetTrigger

作者: 01142f3d9316 | 来源:发表于2019-04-16 14:53 被阅读10次

前言

ResetTrigger是个what?再此之前我并不知道,准确说看到过但是并没有care。

开始了解它,是 因 为 出 BUG 了 !!

  1. 项目中播放动画统一使用全局的一个通用方法。播放动画接口调用SetTrigger。
  2. 摇杆开始移动时,调用SetTrigger("Run"),结束时,调用SetTrigger("Idel")。
  3. 当角色在run时,点击了一个npc,触发寻路接口移动到npc,当然寻路开始时,也会在调用一次settrigger("Run").
  4. 当寻路过程中,再次控制摇杆移动时(打断寻路),没有问题,但是当停止摇杆时,应该播放idle动作,但是实际停止后还是播放run。可是看log。我明明最后一次调用了SetTrigger("Idle")

So着重看了下SetTrigger。

SetTrigger

  • SetTrigger可以改变动画状态机的状态,用于触发动画
  • SetTrigger是四个接口之一,其他还有SetFloat、SetInt、SetBool
  • SetTrigger本质上是SetBool,不同点在于,SetBool有两个可选择的值,false/true。但是SetTrigger比较特殊,调用SetTrigger会自动激活状态,同时又会自动设置状态为false。

我们拿一个案例来讲解一下:


clipboard.png
  1. 当摇杆滑动时,调用SetTrigger播放run动画,可以在当前帧通过GetTrigger("homerun") 看到激活状态是true。 当过了一帧后,再次GetTrigger("homerun") 是false。可以看到,trigger会自动回到false。
  2. 摇杆在滑动角色在跑动时,又调用寻路接口,再次触发SetTrigger("homerun"). 这个时候,homerun的trigger状态又被设置成true。 但是重要的是:因为已经在homerun状态了,unity并不会重新进入这个状态,所以homerun的trigger状态并不会自动进入false。
  3. 所以在我停止的摇杆的时候,虽然我调用了SetTrigger("comidle"), unity会进入idle状态,但是因为homerun的trigger状态一直是true,所以进入idle状态后,又会进入homerun状态。由此引起的bug。

解决办法

ResetTrigger

  • ResetTrigger() 可以重置那些可能已经被激活的Trigger。

所以SetTrigger() 之前,我们需要清除可能已经被激活的Trigger。如下方法:

/// <summary>
        /// 清除所有的激活中的trigger缓存
        /// </summary>
        public void ResetAllTriggers(Animator animator)
        {
            AnimatorControllerParameter[] aps = animator.parameters;
            for (int i = 0; i < aps.Length; i++)
            {
                AnimatorControllerParameter paramItem = aps[i];
                if (paramItem.type == AnimatorControllerParameterType.Trigger)
                {
                    string triggerName = paramItem.name;
                    bool isActive = animator.GetBool(triggerName);
                    if (isActive)
                    {
                        animator.ResetTrigger(triggerName);
                    }
                }
            }
        }

相关文章

  • Unity之碰到哪说到哪-ResetTrigger

    前言 ResetTrigger是个what?再此之前我并不知道,准确说看到过但是并没有care。 开始了解它,是 ...

  • 说到哪是哪

    �“现在开始写吧,写到自己的骨头里。” 昨天和阳哥、家七、方姐一起吃了一顿海底捞,好久不见的全媒体报道小组成员们难...

  • 说到哪算哪?

    说到哪算哪[爱心] 给2016端午节前夜乐跑训练: 今天是端午节假期最后一个工作日,阴雨连绵,上海各要塞被出城的车...

  • 想到哪说到哪

    现在人的交往方式以微信为主,聊天,点赞,视频,语音,互动多的人,朋友就多,互动少了,微信也就冷清了。昨天很随...

  • 想到哪说到哪

    每个人就像森林里的每棵树一样,不能用一定的标准这棵树是好树还是不好的树。无论是歪脖子树还是参天大树都各有用处吧,没...

  • 想到哪说到哪

    中华书局出版过许多经典收藏书籍,而《近思录》恰在其中。我是一个看古籍很慢的人,主要原因无外乎文言文词句晦涩,即使这...

  • 想到哪说到哪

    先生的一句话使我下定决心到海南来。 “海南高考分数线低。” 父母之为子女计深远,我读初中的时候,父亲提过几次,要把...

  • 说到哪是哪

    家族 先有小家,后有族。 一个家族的发展,总是需要一位领导者。在自...

  • 想到哪说到哪

    他人能给你划加班,你自己不告诉他主动给你划,除非是你老公,你家亲戚都够呛。 每个人把自己看得都重要,觉得一定会受她...

  • 想到哪说到了哪……

    看了《陪安东尼度过的漫长岁月》,之所以能让我走进影院,我想大概因为一句话和有个叫白举纲的男生。 白举纲,是我看的快...

网友评论

    本文标题:Unity之碰到哪说到哪-ResetTrigger

    本文链接:https://www.haomeiwen.com/subject/nasbwqtx.html