Unity Animator SetTrigger 未重置为默认值

2024-01-10

正如我希望正确理解动画器“SetTrigger”一旦完成就会将动画设置为 false(如果我错了请纠正我),但我的项目并非如此。

我有两种状态。默认(不执行任何操作)和移动。打开应用程序时会自动输入默认值,并且当我调用“SetTrigger”时会触发移动。我希望动画完成后 Animator 会将此动画 id 设置为 false,然后返回到默认状态。但事实并非如此——动画不断重复。我可以通过手动调用“ResetTrigger”来实现此目的,但随后我需要检测动画何时完成,这对我来说并不方便。

我想实现动画在调用时只播放一次。有任何想法吗?

Thanks

编辑:添加动画控制器

public class TestAnimation : MonoBehaviour
{

    private Animator _animation;
    private static readonly int Playing = Animator.StringToHash("PlayingTrigger");

    // Start is called before the first frame update
    void Start()
    {

        _animation = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {

        if (Input.GetKeyDown(KeyCode.A))
        {
            _animation.SetTrigger(Playing);
         //   _animation.ResetTrigger(Playing);

            IDebug.Log("Playing animation ");
        }
        
        if (Input.GetKeyDown(KeyCode.R))
        {
            _animation.ResetTrigger(Playing);
            IDebug.Log("reseting animation ");
        }
        

    }
}

动画器“SetTrigger”一旦完成就会将动画设置为 false

-> Nope!

它唯一做的就是重置trigger一旦它用于过渡,它本身并不意味着动画状态在动画到达结束后重置。

如果您希望动画完成后返回到空闲/默认状态,请在控制器中添加过渡 https://docs.unity3d.com/Manual/class-Transition.html

yourState -> Idle/Default

with

  • 有退出时间 -> True
  • 持续时间 -> 随意
  • 退出时间 -> 1 - 持续时间

没有进一步的条件。

否则你可能宁愿寻找一个Bool参数和Animator.SetBool instead


但有一个陷阱:触发器可以叠加!

这意味着如果您拨打 5 次SetTrigger那么该触发器将用于 5 次转换,直到最终重置并且不再触发转换!

因此,我最终使用了一个触发器重置器,它不直接连接到特定状态,而是连接到基础层本身-> 对于每个进入的状态都会自动调用它:

public class TriggerRestter : StateMachineBehaviour
{
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        foreach(var p in animator.parameters)
        {
            if (p.type == AnimatorControllerParameterType.Trigger)
            {
                animator.ResetTrigger(p.name);   
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity Animator SetTrigger 未重置为默认值 的相关文章

  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • 如何使用最小起订量模拟私有只读 IList 属性

    我试图嘲笑这个列表 private readonly IList
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • 主构造函数不再在 VS2015 中编译

    直到今天 我可以使用主构造函数 例如 public class Test string text private string mText text 为了能够做到这一点 在以前的 Visual Studio CTP 中 我必须将其添加到 c
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • Web 文本编辑器中的 RTF 格式

    网络上是否有支持 RTF 格式文档输入的文本编辑器 我知道这对 webdev 来说有点奇怪 但我需要从数据库中读取 RTF 文档 并在基于 Web 的文本编辑器中对其进行编辑 然后将其存储回 RTF 中 在我在转换工具上投入太多资金之前 我
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize

随机推荐

  • 在 .net4 上升级到 EF6 - System.Data.MetadataException:指定的架构无效

    我有一个在 net v4 下运行的 asp net 网站 我已从 Entity Framework v5 升级到 v6 02 并且使用 nuget 提供的 EntityFramework v4 dll 在 IIS Express 和 net
  • Java中如何正确获取线程名称?

    我有这个类用于在 Java 中创建线程 package org vdzundza forms import java awt Graphics import java awt Graphics2D public class DrawThre
  • CSS如何使div水平居中

    我正在努力使 div 水平居中 我有以下代码将我的 div 垂直和水平地居中在 body 标记中 但似乎只有垂直部分有效 我怎样才能让水平部分也能工作 提前致谢 body background color 081418 font size
  • 定义一个不可见的类方法是“public”的简写吗?

    我经常看到没有可见性关键字定义的函数代码 例如 class Foo function bar 是不是的简写public功能 省略它是一个好习惯吗 class Foo public function bar 是的你是对的 当您省略可见性修饰符
  • vue.js 应用程序中静态资源的路径

    我正在开发一个基于 vue cli webpack 模板的单页面应用程序 由于我们也必须使用静态资源 因此我们需要在样式表中引用它们 官方文档建议使用绝对路径 如下所示 background image url assets images
  • 观察其他观察者未看到的值

    我有一个可观察的值 它发出独特的值 例如 var source Observable Range 1 100 Publish source Connect 我想观察它的价值 例如两个观察者 但每个观察者仅收到其他观察者未看到的值的通知 因此
  • opencv中有没有相当于matlab conv2的函数

    matlab函数conv2有直接的opencv函数吗 我尝试使用 cvFilter2D 但它似乎给出了与 conv2 不同的结果 例如 CvMat Aa cvCreateMat 2 2 CV 32FC1 CvMat Bb cvCreateM
  • 如何在R中按两列进行分组

    我有一个数据框 我试图对其进行分组 然后根据两列求和 两列是字符 其中一列是月份 另一列是变量 以下是数据框架和结构的示例 row names month variable amount 1 1 Jan x 1000 2 1 Jan x 3
  • 在R中将两列合并为一列[重复]

    这个问题在这里已经有答案了 我有以下数据框 并尝试将两列合并为一列 同时替换NA与数值 ID A B 1 3 NA 2 NA 2 3 NA 4 4 1 NA 我想要的结果是 ID New 1 3 2 2 3 4 4 1 提前致谢 在编写答案
  • 在 pyspark databricks 中并行执行多个笔记本

    问题很简单 master dim py calls dim 1 py and dim 2 py并行执行 这在 databricks pyspark 中可能吗 下图解释了我想要做什么 由于某种原因它出错了 我在这里遗漏了什么吗 仅供其他人使用
  • npm install:使用全局包(如果存在),而不是安装两次

    使用时npm install with a package json文件 如何让它使用符合条件的全局安装的软件包 而不是再次在本地下载并安装该软件包 我知道关于link https docs npmjs com cli link 但是有办法
  • java除法运算中Nan和Infinity是由什么决定的

    下面代码的输出让我感到困惑 为什么NaN有时是无穷大 有时是无穷大 public static void main String args double a 0 0 double b 1 0 int c 0 System out print
  • MySQL 存储过程通过 MS Access (VBA) 中的 ADODB 的输出参数在一台计算机上正确,在另一台计算机上随机

    我已经尝试了 几乎 一切方法来隔离问题 但我迷失了 我有一个 MS Access 应用程序 它使用 ADODB 连接到本地 MySQL 数据库 我将其复制到一台新计算机 但现在存储过程的输出参数每次都包含一个随机值 如果通过 ADODB 完
  • 你能用C#制作一个alpha透明的PNG吗?

    我有一个显示垂直文本的多浏览器页面 作为让文本在所有浏览器中垂直呈现的丑陋黑客 我创建了一个自定义页面处理程序 它返回一个带有垂直绘制文本的 PNG 这是我的基本代码 C 3 但对任何其他版本进行了小幅更改 直至 1 Font f GetS
  • 流星: 发送电子邮件 | AuthError:登录无效 - 535-5.7.8

    我已经安装了电子邮件包并尝试发送测试邮件 但它向我显示以下错误 AuthError 无效登录 535 5 7 8 用户名和密码不被接受 我确信凭据是正确的 并且代码与以下内容相同 https github com ideaq meteor
  • 滚动捕捉会跳过较小屏幕上的部分 - Chrome

    我正在尝试在页面上实现滚动捕捉 我已将scroll snap type 添加到容器元素 并将scroll snap align 添加到子部分 它在大屏幕上的 Chrome 上运行良好 在所有屏幕尺寸的 Firefox 上运行良好 然而 它似
  • 如何从 JTable 中删除一行? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想从 JTable 中删除一些行
  • 利用浏览器缓存外部文件

    我试图让我的谷歌页面速度洞察评级达到不错的水平 但是我也想缓存一些外部文件 有人知道处理这个问题的最佳方法是什么吗 https s swiftypecdn com cc js 5 minutes https pagead2 googlesy
  • 如何使用python比较两个球点的大圆距离和欧氏距离?

    我试图检查当您使用欧几里德距离而不是使用大圆距离 gcd 计算地球上两点的距离时引入的错误 我有两个由纬度和经度定义的点 我使用了 python geopy 框架大圆距离 https github com geopy geopy blob
  • Unity Animator SetTrigger 未重置为默认值

    正如我希望正确理解动画器 SetTrigger 一旦完成就会将动画设置为 false 如果我错了请纠正我 但我的项目并非如此 我有两种状态 默认 不执行任何操作 和移动 打开应用程序时会自动输入默认值 并且当我调用 SetTrigger 时