如何通过枚举使用 Inventory UI 按钮
Posted
技术标签:
【中文标题】如何通过枚举使用 Inventory UI 按钮【英文标题】:how to use Inventory UI buttons by enums 【发布时间】:2021-05-16 01:34:59 【问题描述】:我会尝试解释我的问题。我需要为我的学校项目做简单的 2D 逃生室。我已经准备好大部分脚本,当我单击他添加到库存列表的项目时,我可以在我的库存栏上看到它。问题是,我希望 UI Bar 库存的按钮在我单击项目后知道我一直在单击什么项目。我这样做的方式工作了一半,因为他总是给关键项目。我有状态机接口。该继承到另外 2 个脚本(打开或关闭其他交互的东西(门抽屉)。得到 KeyItems 脚本和 Interactable Script 和 UImanager - Singleton。 有通用的方式吗? 这是我将点击的物品添加到库存中的 PlayerCast 脚本,我认为按钮需要在这里
public enum item none , paperclip , key
public class PlayerCast : MonoBehaviour
public Camera cam;
public List<item> inventory;
public item activeItem;
private void Start()
inventory = new List<item>();
// Update is called once per frame
void Update()
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Input.GetMouseButtonDown(0))
if (Physics.Raycast(ray, out hit))
if (hit.collider.CompareTag("Interact"))
Interactable interactable = hit.collider.gameObject.GetComponent<Interactable>();
interactable.CLickMe(activeItem);
else if(hit.collider.CompareTag("Key"))
KeyItems hitItem = hit.collider.gameObject.GetComponent<KeyItems>();
hitItem.PickMeUp();
public void ButtonSelect() //this is the generic button im trying to do
this.activeItem = item.key;
Debug.Log("Clicked");
【问题讨论】:
【参考方案1】:你需要事件。
public enum ItemTypes None , Paperclip , Key
[DisallowMultipleComponent]
public class Foo : MonoBehaviour
// Action its void delegate
public event System.Action<ItemTypes> Selected;
public ItemTypes ActiveItem get; private set; ; // property
public void ButtonSelect ()
ActiveItem = ItemTypes.Key;
Selected?.Invoke(ActiveItem); // invoke event
[DisallowMultipleComponent]
public class YourUIBar : MonoBehaviour
[SerializeField] private Foo _foo; // link on inspector
private void OnEnable ()
ItemChange(Foo.ActiveItem); // setup current
Foo.Selected += ItemChange; // subscribe to event
private void OnDisable ()
Foo.Selected -= ItemChange;
private void ItemChange (ItemTypes item)
// your code
【讨论】:
首先感谢您的 cmets!我以前从未使用过事件,这是唯一的方法吗?我不知道什么是事件以及如何使用它们?但我看到你使用了 ActiveItem = item.key,它不会只是回形针吗?如果它现在是关键会发生什么。它对我不起作用 哦,项目它的枚举。固定。以上是关于如何通过枚举使用 Inventory UI 按钮的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D 通用提示窗口实现分析(Inventory Pro学习总结)