按钮按下时启动动画不起作用

时间:2016-07-09 11:56:31

标签: c# unity3d unity5

对于我最近的项目,我需要打开一扇门,如果用户在它前面并按下了" e"。

这是按钮的代码:

using UnityEngine;

public class Button : MonoBehaviour
{

    public Animator Door; // In the editor, give a reference to your door. It     must have an Animator script for this to work

    void OnTriggerEnter(Collider c)
    {
        if (c.gameObject.tag == "Player")
        {
            //Text = "E to interact!" 

            if (Input.GetKeyDown("e"))
            {
                print("´Test");
                GetComponent<Animator>().SetTrigger("OnPress"); // The button's animator goes to "pressed" state
                Door.SetTrigger("Open");  // The door's animator goes to "open" state
            }
        }
    }
}

Animator看起来像这样: Animator

从空闲到开放的过渡: enter image description here

按钮上有门: Door with Animator

所以我在这里遇到两个问题,第一个问题是 - 如果按下E,上面的代码没有任何反应。没有错误,没有动作,无论如何。 如果我删除Input.GetKeyDown("e")并将Button-Mesh设为触发器并在其中运行,则表示

  

MissingComponentException:没有&#39; Animator&#39;附在   &#34;按钮&#34;游戏对象,但脚本正试图访问它。您   可能需要在游戏对象中添加一个Animator&#34; Button&#34;。或者你的   脚本需要在使用之前检查组件是否已连接。

如果您需要更多信息,请告诉我们。谢谢!

1 个答案:

答案 0 :(得分:2)

好的,你的互动方法是错误的。首先,On触发器输入只能工作一次。那是你输入触发器的时候。所以它不会接受Keypress活动。您将不得不在OnTriggerStay(Collider col)中移动代码,以便不断调用代码。如果它需要任何关键事件,那么它将启动。这将解决你的问题1.

至于第二个问题,我很确定你从其他地方复制粘贴这段代码。只有画布UI按钮具有动画状态。您的按钮是普通网格而不是UI网格。因此,在该代码中设置状态按钮将不起作用,即

GetComponent<Animator>().SetTrigger("OnPress"); // The button's animator goes to "pressed" state

除非您使用Canvas按钮,否则脚本不起作用。并且错误描述已经提到错误你按钮网格没有动画师。尝试评论该行,看看它是如何工作的。

编辑:

我完成了你的代码转换

door.GetComponent<Animator>().SetTrigger("OnPress"); 

而不是

GetComponent<Animator>().SetTrigger("OnPress");

因为它试图调用门动画师的OnPress状态。如果有任何问题,请在下面提供更多信息。抱歉没有注意到这一点。