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