我有一个对象,我正在尝试让玩家输入触发器并按下键,交换相机。
我的代码:
public class Canhao : MonoBehaviour
{
public Camera cameraPlayer;
public Camera CameraCanhao;
private void Start()
{
cameraPlayer.gameObject.SetActive(true);
CameraCanhao.gameObject.SetActive(false);
}
private void OnTriggerEnter(Collider other)
{
if(other.gameObject.CompareTag("Player") || Input.GetKeyDown(KeyCode.C))
{
if(cameraPlayer.gameObject.activeSelf)
{
cameraPlayer.gameObject.SetActive(false);
CameraCanhao.gameObject.SetActive(true);
}
}
}
但是他不遵守按下C键的条件,而只是在玩家进入扳机时才切换相机。我忘记了什么?
答案 0 :(得分:3)
不要检查物理回调函数中的输入。在true
函数中将标记设置为OnTriggerEnter
,然后在false
函数中将标记设置为OnTriggerExit
。然后,您可以在Update
函数中检查该标志。您还应该在Update
函数中检查“ C”键是否被按下,因为每帧都会被检查一次。
最后,要检查在按下“ C”键时是否存在触发器,请使用&&
而不是||
。当您使用||
时,这意味着if
语句将在任何条件为true
时都将验证为true
,但是您都希望两者都为true
应该使用&&
。
public Camera cameraPlayer;
public Camera CameraCanhao;
bool triggered = false;
private void Start()
{
cameraPlayer.gameObject.SetActive(true);
CameraCanhao.gameObject.SetActive(false);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.C) && triggered)
{
if (cameraPlayer.gameObject.activeSelf)
{
cameraPlayer.gameObject.SetActive(false);
CameraCanhao.gameObject.SetActive(true);
}
}
}
private void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
triggered = true;
}
}
private void OnTriggerExit(Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
triggered = false;
}
}
请注意,如果这对您不起作用,请确保将Debug.Log
放在OnTriggerEnter
和OnTriggerExit
内,以确保它们被调用。如果未调用它们,请确保在对撞机上启用了“是触发器”,并且还向对撞机附加了Rigidbody
。
答案 1 :(得分:1)
您要放置TRIGGER || KEYPRESS您必须替换||与&&。
if(other.gameObject.CompareTag("Player") && Input.GetKeyDown(KeyCode.C))