【发布时间】:2019-06-10 23:43:56
【问题描述】:
我正在尝试编写代码,让玩家对箱子上的 OnTriggerEvent2D 做出反应,然后打开箱子库存。我有让箱子在地图上随机生成,并且物品栏位于场景中。
我已尝试将胸部库存移至场景和胸部预制件。 我已将可交互代码添加到胸部预制件中,并在胸部预制件中有胸部库存时将胸部库存作为游戏对象。当库存 UI 位于场景中时,我无法执行此操作。
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
}
}
}
我希望宝箱清单 UI 是可见的,并且游戏会停止,但什么也没发生。
【问题讨论】:
-
尝试使用
void OnTriggerStay2D (Collider2D collision),因为您希望在有重叠的每一帧都调用它。否则,玩家将不得不在重叠开始的确切帧上按下键,这不是你的意思:) 另外我认为在它上面使用private可能会搞砸所以只需将它作为void ...没有访问修饰符 -
另外请注意,keydown 和 keyup 可能发生在 single 帧期间,尤其是在有延迟的情况下,因此
if(input.GetKeyDown(...))和if(Input.GetKeyUp(...))块最终都可能是如果关键事件发生在当前帧期间,它们都会返回 true。