对于我最近的项目,我需要打开一扇门,如果用户在它前面并按下了" 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
}
}
}
}
所以我在这里遇到两个问题,第一个问题是 - 如果按下E,上面的代码没有任何反应。没有错误,没有动作,无论如何。
如果我删除Input.GetKeyDown("e")
并将Button-Mesh设为触发器并在其中运行,则表示
MissingComponentException:没有&#39; Animator&#39;附在 &#34;按钮&#34;游戏对象,但脚本正试图访问它。您 可能需要在游戏对象中添加一个Animator&#34; Button&#34;。或者你的 脚本需要在使用之前检查组件是否已连接。
如果您需要更多信息,请告诉我们。谢谢!
答案 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状态。如果有任何问题,请在下面提供更多信息。抱歉没有注意到这一点。