Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我的角色在NPC';s碰撞器和按钮被按下_C#_Unity3d - Fatal编程技术网

C# 当我的角色在NPC';s碰撞器和按钮被按下

C# 当我的角色在NPC';s碰撞器和按钮被按下,c#,unity3d,C#,Unity3d,我目前正在尝试编写一个游戏,在游戏中,当与NPC对话时,相机会切换,但是在对撞机中按下键时,它似乎不起作用,但是如果我删除GetButtonDown if语句,它就可以了 public class NPCInteraction : MonoBehaviour { [SerializeField] Camera MainCamera; void Start() { MainCamera.GetComponent<Camera>().

我目前正在尝试编写一个游戏,在游戏中,当与NPC对话时,相机会切换,但是在对撞机中按下键时,它似乎不起作用,但是如果我删除GetButtonDown if语句,它就可以了

    public class NPCInteraction : MonoBehaviour {
    [SerializeField]
    Camera MainCamera;

    void Start()
    {
      MainCamera.GetComponent<Camera>().enabled = true;
    }


       void OnTriggerEnter(Collider other) {

        if (other.gameObject.tag == ("NPC"))
        {
           if (Input.GetButtonDown("Interact"))
            {
                MainCamera.GetComponent<Camera>().enabled = false;
                other.GetComponentInChildren<Camera>().enabled = true;
            }
        }
            }    
void OnTriggerExit(Collider other)
    {
     if (other.gameObject.tag == ("NPC"))
        {
            MainCamera.GetComponent<Camera>().enabled = true;
            other.GetComponentInChildren<Camera>().enabled = false;

        }
    }
}
公共类NPC交互:单一行为{
[序列化字段]
摄像机主摄像机;
void Start()
{
MainCamera.GetComponent().enabled=true;
}
无效对撞机(对撞机其他){
如果(other.gameObject.tag==(“NPC”))
{
if(Input.GetButtonDown(“交互”))
{
MainCamera.GetComponent().enabled=false;
other.getComponentChildren().enabled=true;
}
}
}    
void OnTriggerExit(碰撞器其他)
{
如果(other.gameObject.tag==(“NPC”))
{
MainCamera.GetComponent().enabled=true;
other.getComponentChildren().enabled=false;
}
}
}

这是因为
Input.GetButtonDown
仅在用户按下按钮的帧中返回true。因此,如果这也是发生在
OnTriggerEnter
的同一帧,那么您将非常幸运

而是使用
Input.GetButton

按住buttonName标识的虚拟按钮时返回true

编辑(来自评论)

上述解决方案仅在首次碰撞时按下按键时有效,如果在碰撞后(仍在触发器内)按下按键,则使用
OnTriggerStay
而不是
ontriggenter


使用
OnTriggerEnter
/
OnTriggerExit
进行bool切换,并检查
更新中的输入情况

谢谢,我尝试了,但它似乎仍然不起作用。修复了它。我用OnTriggerStayOh替换了OnTriggerEnter。是的。使用OnTiggerEnter,在发生碰撞时必须按下该键。我将更新答案。在
OnTriggerEnter
OnTriggerExit
函数之间切换并在
update
函数中选中的布尔变量比使用
OnTriggerStay
更好。