我目前正在尝试编写一个游戏,其中相机在与 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;
}
}
}
这是因为Input.GetButtonDown
只返回用户按下按钮的帧。因此,如果这也是OnTriggerEnter
发生的同一帧,那将是相当幸运的。
请改用Input.GetButton
按住由按钮名称标识的虚拟按钮时返回 true。
https://docs.unity3d.com/ScriptReference/Input.GetButton.html
编辑(来自评论(
上述解决方案仅在初始碰撞时按下键时才有效,要在之后按下键(仍在触发器内(使其工作,请使用OnTriggerStay
而不是OnTriggerEnter
。
或
用OnTriggerEnter
/OnTriggerExit
进行布尔切换并检查输入Update