Невозможно щелкнуть элементы в сборке Unity с использованием скрипта C # - PullRequest
0 голосов
/ 16 марта 2019

Я создал систему инвентаризации с использованием сценариев Unity и C #, я следовал учебному пособию Крызареля на Youtube, чтобы создать систему инвентаризации. Я не могу щелкнуть пункты в сборке. Я попытался перепроверить код с помощью кода Крызареля, и я не смог найти, что происходит не так. Ниже приведены классы, для которых назначены события.

`

 using UnityEngine;
    using UnityEngine.UI;
    using CharacterStats;

    public class Character : MonoBehaviour
    {
        public CharacterStat Strength;
        public CharacterStat Agility;
        public CharacterStat Intelligence;
        public CharacterStat Defence;
        public CharacterStat Damage; 

        [SerializeField] Inventory inventory;
        [SerializeField] EquipmentPanel equipmentPanel;
        [SerializeField] StatPanel statPanel;
        [SerializeField] Image draggableItem;

        private ItemSlot draggedSlot;

        private void Awake()
        {
            statPanel.SetStats(Strength, Agility, Intelligence, Defence,Damage);
            statPanel.UpdateStatValues();


            inventory.OnRightClickEvent += Equip;
            equipmentPanel.OnRightClickEvent += Unequip;
            inventory.OnBeginDragEvent += BeginDrag;
            equipmentPanel.OnBeginDragEvent += BeginDrag;

            inventory.OnEndDragEvent += EndDrag;
            equipmentPanel.OnEndDragEvent += EndDrag;

            inventory.OnDragEvent += Drag;
            equipmentPanel.OnDragEvent += Drag;

            inventory.OnDropEvent += Drop;
            equipmentPanel.OnDropEvent += Drop;

       }



   }`

`
public class Inventory : MonoBehaviour
{
    [SerializeField] List<Item> startingItems;
    [SerializeField] Transform itemsParent;
    [SerializeField] ItemSlot[] itemSlots;

    public event Action<ItemSlot> OnRightClickEvent;
    public event Action<ItemSlot> OnPointerEnterEvent;
    public event Action<ItemSlot> OnPointerExitEvent;
    public event Action<ItemSlot> OnBeginDragEvent;
    public event Action<ItemSlot> OnEndDragEvent;
    public event Action<ItemSlot> OnDragEvent;
    public event Action<ItemSlot> OnDropEvent;


    private void Start()
    {
        for(int i=0; i < itemSlots.Length; i++)
        {
            itemSlots[i].OnRightClickEvent += OnRightClickEvent;
            itemSlots[i].OnPointerEnterEvent += OnPointerEnterEvent;
            itemSlots[i].OnPointerExitEvent += OnPointerExitEvent;
            itemSlots[i].OnBeginDragEvent += OnBeginDragEvent;
            itemSlots[i].OnEndDragEvent += OnEndDragEvent;
            itemSlots[i].OnDragEvent += OnDragEvent;
            itemSlots[i].OnDropEvent += OnDropEvent;
        }
        SetStartingItems();
    }`


`
public class EquipmentPanel : MonoBehaviour
{
    [SerializeField] Transform equipmentSlotsParent;
    [SerializeField] EquipmentSlot[] equipmentSlots;

    public event Action<ItemSlot> OnRightClickEvent;
    public event Action<ItemSlot> OnPointerEnterEvent;
    public event Action<ItemSlot> OnPointerExitEvent;
    public event Action<ItemSlot> OnBeginDragEvent;
    public event Action<ItemSlot> OnEndDragEvent;
    public event Action<ItemSlot> OnDragEvent;
    public event Action<ItemSlot> OnDropEvent;


    public void Start()
    {
        for (int i = 0; i < equipmentSlots.Length; i++)
        {
            equipmentSlots[i].OnRightClickEvent += OnRightClickEvent;
            equipmentSlots[i].OnPointerEnterEvent += OnPointerEnterEvent;
            equipmentSlots[i].OnPointerExitEvent += OnPointerExitEvent;
            equipmentSlots[i].OnBeginDragEvent += OnBeginDragEvent;
            equipmentSlots[i].OnEndDragEvent += OnEndDragEvent;
            equipmentSlots[i].OnDragEvent += OnDragEvent;
            equipmentSlots[i].OnDropEvent += OnDropEvent;
        }
    }

`

1 Ответ

0 голосов
/ 16 марта 2019

Является ли ItemSlot внутри инвентаря?возможно, он перекрывает друг друга.

Вы можете видеть, что

//the inventory event handler
inventory.OnRightClickEvent += Equip;
inventory.OnBeginDragEvent += BeginDrag;
inventory.OnEndDragEvent += EndDrag;
inventory.OnDragEvent += Drag;
inventory.OnDropEvent += Drop;

//the itemslot event handler
for(int i=0; i < itemSlots.Length; i++)
    {
        itemSlots[i].OnRightClickEvent += OnRightClickEvent;
        itemSlots[i].OnPointerEnterEvent += OnPointerEnterEvent;
        itemSlots[i].OnPointerExitEvent += OnPointerExitEvent;
        itemSlots[i].OnBeginDragEvent += OnBeginDragEvent;
        itemSlots[i].OnEndDragEvent += OnEndDragEvent;
        itemSlots[i].OnDragEvent += OnDragEvent;
        itemSlots[i].OnDropEvent += OnDropEvent;
    }

этот обработчик двух событий может перекрываться, поэтому при щелчке по паре предметов это может быть обработчик даже инвентаря, который обработал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...