【问题标题】:Can't Play 3 Animations on one Object Unity3D无法在一个对象上播放 3 个动画 Unity3D
【发布时间】:2019-05-20 23:21:45
【问题描述】:

我想在一个立方体上播放3个动画,当检查条件时,应该播放第一个动画,然后在检查第二个条件时,第二个动画和最后一个动画。

所以我创建了 3 个动画并将它们作为遗留,然后我将动画组件附加到立方体,并将动画添加到它。我在下面的脚本中遇到的问题是第一个动画效果很好,但剩下的 2 个没有。我应该怎么做才能解决这个问题?

Animation CubeRot;
    bool Rot = false;

    // Use this for initialization
    void Start () {

        CubeRot = gameObject.GetComponent<Animation>();
    }

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

        if (FindObjectOfType<HoseController>().Rotated1 == true)
        {
            if (!Rot)
            {
                CubeRot.Play("Rot1");
                Rot = true;
            }
        }
        if (FindObjectOfType<HoseController>().Rotated2 == true)
        {
            if (!Rot)
            {
                CubeRot.Play("Rot2");
                Rot = true;
            }
        }
    }

【问题讨论】:

  • 一般情况下:不要不要重复使用FindObjectOfType。而是将引用存储一次并像private HoseController hoseController; private void Start() { hoseController = FindObjectOfType&lt;HoseController&gt;(); } 一样重用它,然后在任何地方只使用例如if(hoseController.Rotated1){ ... }
  • @derHugo 感谢您的提示!

标签: c# unity3d


【解决方案1】:

是不是因为你在第一次更新中设置了Rot = true;。那么第二次更新需要Rot 变量为false,但从第一次更新开始仍然如此?

【讨论】:

    【解决方案2】:

    首先: 你要求 Rot 在两个 if 中都是 false。

    第二: 如果 Rotated1 为 true,则第一部分将循环(因为您在更新中)并且由于您没有在 if 中将其设置为 false,它将继续循环。 你甚至可以避免同时使用 Rotated1 和 Rot

    您还应该尽量避免使用遗留动画组件。在新的 Animator 组件中做同样的行为应该很容易

    终于避免每次都使用 FindObjectOfType

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-22
      • 2014-09-03
      • 2021-02-11
      • 1970-01-01
      • 2020-03-05
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多