C# 按下按钮不工作时启动动画
对于我最近的项目,我需要一扇门打开,如果用户在它前面,并按下“e” 这是按钮的代码:C# 按下按钮不工作时启动动画,c#,unity3d,unity5,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 OnTriggerE
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
}
}
}
}
使用UnityEngine;
公共类按钮:MonoBehavior
{
public Animator Door;//在编辑器中,提供门的引用。它必须有一个动画师脚本才能工作
无效对撞机(对撞机c)
{
如果(c.gameObject.tag==“玩家”)
{
//Text=“E进行交互!”
if(Input.GetKeyDown(“e”))
{
打印(“测试”);
GetComponent
从空闲到打开的转换:
按钮上连接有门:
所以我这里有两个问题,第一个是-对于上面的代码,如果我按下E,什么都不会发生。没有错误,没有任何动作。
如果我删除Input.GetKeyDown(“e”)
并使按钮与触发器啮合并在其中运行,它会说
MissingComponentException:没有“Animator”附加到
“按钮”游戏对象,但脚本正在尝试访问它。您
可能需要在游戏对象“Button”中添加一个动画师。或者
脚本在使用之前需要检查组件是否已连接
如果您需要更多信息,请告诉我。谢谢!好的,您的交互方法是错误的。首先,在触发时输入只起作用一次。这是在您输入触发时。因此,它不会接受按键事件。您必须将代码移到不断调用它的位置。如果需要任何按键事件,则它会被激活这将解决你的问题
至于第二个问题,我很确定你从其他地方复制粘贴了这段代码。只有画布UI按钮有动画状态。你的按钮是普通网格,而不是UI按钮。因此在代码中设置状态按钮将不起作用,即
GetComponent().SetTrigger(“OnPress”);//按钮的动画程序进入“按下”状态
除非您使用的是画布按钮,否则脚本不起作用。错误描述中已经提到错误,您的按钮网格没有动画师。请尝试对该行进行注释,看看它是如何工作的
编辑:
我经历了你的转换你的代码应该是
door.GetComponent<Animator>().SetTrigger("OnPress");
door.GetComponent().SetTrigger(“OnPress”);
而不是
GetComponent<Animator>().SetTrigger("OnPress");
GetComponent().SetTrigger(“OnPress”);
因为它正在尝试调用门动画师的OnPress状态。如果出现任何问题,请在下面评论更多信息。很抱歉,没有首先注意到这一点。好的,您的交互方法是错误的。首先,在触发时输入将只起作用一次。这是在您输入触发器时。因此它不会接受Keypress事件。您必须移动e代码,在那里它将不断被调用。在那里,如果它需要任何关键事件,那么它将启动。这将解决您的问题1
至于第二个问题,我很确定你从其他地方复制粘贴了这段代码。只有画布UI按钮有动画状态。你的按钮是普通网格,而不是UI按钮。因此在代码中设置状态按钮将不起作用,即
GetComponent().SetTrigger(“OnPress”);//按钮的动画程序进入“按下”状态
除非您使用的是画布按钮,否则脚本不起作用。错误描述中已经提到错误,您的按钮网格没有动画师。请尝试对该行进行注释,看看它是如何工作的
编辑:
我经历了你的转换你的代码应该是
door.GetComponent<Animator>().SetTrigger("OnPress");
door.GetComponent().SetTrigger(“OnPress”);
而不是
GetComponent<Animator>().SetTrigger("OnPress");
GetComponent().SetTrigger(“OnPress”);
因为它正在尝试调用门动画师的OnPress状态。如果出现任何问题,请在下面评论更多信息。很抱歉,没有首先注意到这一点。您可以选择过渡并在此处显示它吗?您可以选择过渡并在此处显示它吗?好的,代码现在就可以工作了!是的,我复制并粘贴了我之前提出的问题中的内容ed.该代码来自@Toaster。但是,我现在得到“参数‘打开’不存在。”作为一个错误。你能帮我解决吗?我认为应该还有问题。SetTrigger(“打开”);您不能播放这样的剪辑。这只是根据参数设置触发器。大多数情况下会出现错误。您可能必须重新制作动画。请再次尝试与动画师联系。这是错误的动画师触发方法。您的动画师未正确设置。请重新设置。如果您要播放特定的剪辑,只需说“动画师”Object.Play(“Clipname”);我推荐的简单方法是创建四个单独的剪辑。空闲关闭、关闭、空闲打开、打开、剪辑。然后设置它们的转换,如关闭->空闲关闭和打开->空闲打开。然后只需说animatorobj.Play(“关闭”)和animatorobj.Play(“打开”)。这将直接转换状态而不使用参数变量。默认情况下,我将保持空闲状态作为默认动画。谢谢你们两个!你们的答案完美无瑕:)好的,代码现在就可以工作了!是的,我复制并粘贴了我之前问过的一个问题的代码。该代码来自@Toaster。但是,我现在明白了“参数‘打开’不存在。”作为一个错误。您能帮我解决吗?我认为应该仍然存在问题。SetTrigger(“打开”);您不能播放这样的剪辑。这只是根据参数设置触发器。大多数情况下会出现错误。您可能必须重新制作动画。请再次尝试与动画师联系。这是错误的动画师触发方法。您的动画师未正确设置。请重新设置。如果您要播放特定的剪辑,只需说“动画师”Object.Play(“Clipname”);我在这里推荐的简单方法是创建四个单独的剪辑。空闲关闭、关闭、空闲打开、打开、剪辑。然后设置它们的转换,如关闭->空闲关闭和打开->空闲打开。然后只说animatorobj.Play(“关闭”)和animatorobj.Play(“打开”)。这将直接转换状态,而无需参数