Не проверять ввод в функции обратного вызова физики.Установите флаг 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
, чтобы убедиться, что они вызываются.Если они не вызываются, убедитесь, что на коллайдерах включен «Is Trigger» и что к коллайдерам также прикреплено Rigidbody
.