(Unity C #) Некоторые методы могут получить доступ к стеку, но некоторые не могут, оставив его пустым - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть ошибка в моем проекте Unity, и для меня нет никакого смысла, почему, попросту говоря, у меня есть скрипт со стеком, который представляет слот инвентаря, когда вы добавляете в него элемент, он толкает его в правильный слот инвентаря, как показано в этом GIF: https://imgur.com/a/wxDpvsG

Слева - инвентарь, справа - коробка со случайными предметами. Моя проблема началась с попытки создать всплывающую подсказку для удаления предметов из инвентаря. Вот скрипт слотов.

    public class InvSlots : MonoBehaviour , IPointerEnterHandler, IPointerExitHandler
    {

        public Stack<Item> items = new Stack<Item>();

        public Text stackTxt;

        public Image imgItem;

        public GameObject ToolTip, Exclude;


        public bool IsEmpty
        {
            get { if (items == null) { return true; } return items.Count == 0; }
        }

        public int CountItem()
        {
            return this.items.Count;
        }


        public Item CurrentItem
        {

            get { return items.Peek(); }

        }

        public bool isAvailable
        {

            get { return CurrentItem.maxnumber > items.Count; }

        }

        public void addItem(Item item)
        {
            items.Push(item);
            changeSprite(Resources.Load<Sprite>("imgs/ItemIcons/" + item.iconPath));
            if (items.Count >= 1)
            {
                stackTxt.text = items.Count.ToString();
            }
        }

        private void changeSprite(Sprite sprite)
        {
            imgItem.sprite = sprite;
            imgItem.color = new Vector4(1, 1, 1, 1);
        }


     public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("pointer enter " + items.Peek().nome);
        if (items.Count > 0)
        {
            Instantiate(ToolTip, gameObject.transform.position, new Quaternion(), GameObject.Find("BGInv").transform);
            GameObject.Find("ToolTipNome").GetComponent<TMPro.TextMeshProUGUI>().text = CurrentItem.nome;
            GameObject.Find("ToolTipDesc").GetComponent<TMPro.TextMeshProUGUI>().text = CurrentItem.desc;
        }
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("pointer exit" + items.Peek().nome);
        if (items.Count > 0)
        {
            Destroy(GameObject.Find("HoverOver Tooltip 1(Clone)"));
        }
    }

    public void OpenExclude()
    {
        Debug.Log("Open Exclude " + items.Peek().nome);
        if (items.Count > 0)
        {
            Destroy(GameObject.Find("HoverOver Tooltip 1(Clone)"));
            Instantiate(Exclude, gameObject.transform.position, new Quaternion(), GameObject.Find("BGInv").transform);
        }

    }

    public void CloseExclude()
    {
        Debug.Log("Close exclude " + items.Peek().nome);
        if (items.Count > 0)
        {
            Destroy(GameObject.FindGameObjectWithTag("ExcludeItems"));
        }
    }

    public void ExcludeOneItem()
    {
        Debug.Log("Exclude 1 " + items.Peek().nome);
        if (items.Count > 0)
        {
            items.Pop();
            stackTxt.text = items.Count.ToString();
            Destroy(GameObject.FindGameObjectWithTag("ExcludeItems"));
        }
    }

    public void ExcludeAllItem()
    {
        Debug.Log("Exclude all " + items.Peek().nome);
        if (items.Count > 0)
        {
            imgItem.color = new Vector4(1, 1, 1, 1);
            items.Clear();
            stackTxt.text = "";
            Destroy(GameObject.FindGameObjectWithTag("ExcludeItems"));
        }
    }
}

Таким образом, в основном, у меня есть этот стек элементов, НО всякий раз, когда я пытаюсь получить доступ к стеку с помощью методов CloseExclude (), ExcludeOneItem () и ExcludeAllItem (), стек пуст, но в любом другом методе сценария стек есть предметы, как это должно быть. Я понятия не имею, почему происходит что-то подобное, я никогда не видел ничего подобного. Просто чтобы было ясно, эти методы вызываются из OnClick кнопок, но так же и OpenExclude (), поэтому я не думаю, что это так. Как вы можете видеть в скрипте, у меня есть куча журналов, вот изображение консоли: Консоль

И GIF, чтобы помочь вам, ребята, увидеть это более четко: https://imgur.com/a/KxEsOUl

TLDR У меня есть стек, который не работает с некоторыми методами моего сценария, но отлично работает с другими.

1 Ответ

0 голосов
/ 16 ноября 2018

Благодаря elgozo Мне удалось сделать все правильно, в префабе меню исключений получился неправильный экземпляр InvSlots! Я просто создал скрипт для установки InvSlots, который используется префабом, когда он создается, чтобы он не испортил его.

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