【问题标题】:If function with parameters inside Animator如果在 Animator 中带有参数的函数
【发布时间】:2021-07-02 17:08:19
【问题描述】:

我尝试创建一个 if 语句,当动画器中的参数达到某个值时该语句开始工作。但我不知道如何通过脚本访问这些参数。我尝试了几件事(PlayerMovement 是一个公共动画师):

if (PlayerMovement.Parameter("PlayerDayDreaming" = 1f))
{
Debug.Log("Switch Scene");
}

if(Playermovement.Parameters.Daydreaming == 1f)
{
Debug.Log("Switch Scene");
}

还有几个看起来很喜欢,但我就是想不通。有人知道怎么做吗?

编辑:我添加了一个截图

【问题讨论】:

  • 嗯。也许'if (PlayerMovement.Parameter("PlayerDayDreaming") == 1f)'?
  • 不行不行,说Animator不包含参数的定义

标签: c# unity3d animator


【解决方案1】:

如果Animator 有字段Parameters,我不熟悉。我知道它有一个参数数组paramaters。通常,在尝试获取特定参数字段时,您会使用GetBoolGetInteger 或任何与您的特定参数字段类型对应的对应项。

如果您使用的 Unity 版本中存在 Parameters 字段,那么您可以继续使用它。 cmets 中指出的代码中的另一个错误是您当前在 if 条件中使用赋值运算符 (=) 而不是比较运算符 (==),它应该始终返回 true,因为赋值应该成功。最后一个问题是您直接比较一个浮点数,这可能由于浮点精度而出现问题。我用Mathf.Approximately 来解决这个问题。

使用基于参数类型和固定条件的参数检查,代码应如下所示:

if(Mathf.Approximately(PlayerMovement.GetFloat("PlayerDayDreaming"), 1f))
{
    Debug.Log("Switch Scene");
}

【讨论】:

  • 我想它并不是真的在这个领域,如果你打开控制器进入带有“动画块”的页面,那么在左侧你有两个选项卡:图层和参数。我添加了一张图片来显示我的意思是哪个浮动
  • 哦,所以你只是问你是如何访问这些字段的,你的 sn-ps 是更多的伪代码吗?在这种情况下,使用我提供的 sn-p 它应该做你想做的事。 PlayerMovement 是对象上的 Animator 组件。
  • 好的,谢谢,它现在可以正常工作了。请问Mathf.Approximately 是如何工作的以及为什么它是, 1f 而不是= 1f== 1f
  • 当然!如果您单击超链接,它应该会解释它是什么。在处理浮点数时,精度有时会导致不准确,这意味着 1.0f 不是 1.00001f,但可以以这种方式存储。考虑到这一点,近似值将运行代码将两个输入的绝对值与分隔符进行比较,这是一个非常小的比较值。类似abs(1.0-1.000001) < 0.01
  • 非常感谢!我没有看到你一开始就包含了一个超链接,其他部分也变得更清晰了
猜你喜欢
  • 2014-09-03
  • 2016-11-13
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多