Почему я не могу обнаружить нажатие клавиш, когда игрок находится на верхней части груди - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь написать код, в котором игрок реагирует на OnTriggerEvent2D на сундуке, а затем открывает инвентарь сундука. У меня так, что сундуки случайным образом генерируются на карте, а инвентарь находится на сцене.

Я попытался переместить инвентарь сундука на сцену и на сборный сундук. Я добавил интерактивный код в префаб сундука и поместил инвентарь сундука в качестве игрового объекта, когда в префабе сундука был инвентарь сундука. Я не могу сделать это, когда пользовательский интерфейс инвентаря находится на сцене.

using UnityEngine;
using UnityEngine.SceneManagement;

public class ChestInteractable : MonoBehaviour
{
    [SerializeField] KeyCode interactableKey = KeyCode.E; //allow player to choose key

    public GameObject chestInventoryUI;

    private void OnTriggerEnter2D(Collider2D collision) //if player collides with chest (I am unsure if OnCollisionEnter2D is better, I am only a beginner)
    {
        if(Input.GetKeyDown(interactableKey)) {
            chestInventoryUI.SetActive(true); //open up chest inventory
            Time.timeScale = 0f; //time is stopped
        }

        if(Input.GetKeyUp(interactableKey))
        {
            chestInventoryUI.SetActive(false); //closes chest inventory
            Time.timeScale = 1f; //time resumes
        }
    }
}

Я ожидал, что пользовательский интерфейс сундука будет виден, и игра будет остановлена, но ничего не произошло.

1 Ответ

0 голосов
/ 24 мая 2019

Использование OnTriggerStay2D

void OnTriggerStay2D(Collider2D other)
{
    if (Input.GetKeyDown(interactableKey))
    {
        chestInventoryUI.SetActive(true);
        Time.timeScale = 0.0f;
    }

    if (Input.GetKeyUp(interactableKey))
    {
        chestInventoryUI.SetActive(false);
        Time.timeScale = 1.0f;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...