Обнаружение нажатия клавиши при столкновении / триггере - PullRequest
0 голосов
/ 07 октября 2018

У меня есть объект, и я пытаюсь заставить игрока войти в триггер и нажать клавишу, поменять камеру.

Мой код:

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, а просто переключая камеру, когда игрок нажимает на курок.Я что-то забыл?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Не проверять ввод в функции обратного вызова физики.Установите флаг 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.

0 голосов
/ 07 октября 2018

Вы ставите TRIGGER ||KEYPRESS вы должны заменить ||с &&.

if(other.gameObject.CompareTag("Player") && Input.GetKeyDown(KeyCode.C))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...