Не могу правильно распечатать последний элемент массива - PullRequest
0 голосов
/ 30 января 2019

Я использую массив для хранения всех игровых объектов с тегом "ChoosenItems".Если слой соберет 8 элементов, он распечатает все элементы, выбранные в консоли.Когда я беру последний элемент, он печатает имя изображения первых 7, а последний элемент остается «empty_item».Он добавляет все элементы в массив, но последний элемент не является последним выбранным по некоторым причинам.

Я попытался отложить свою функцию, используя System.Threading.Thread.Sleep (5000);

    public class PickUpItem : MonoBehaviour, IInteractable
    {
        public string DisplaySprite;
        public string DisplayImage;
        public static int counter;
        public static GameObject InventorySlots;
        public static GameObject[] PlayerItems = new GameObject[8];

        public void Interact(DisplayImage currentDisplay)
        {
            ItemPickUp();
        }

        void Start() { }
        void Update() { }

        public void ItemPickUp()
        {
            InventorySlots = GameObject.Find("Slots");
            int j;
            counter = 0;

            foreach (Transform slot in InventorySlots.transform)
            {
                if (slot.transform.GetChild(0).GetComponent<Image>().sprite.name == "empty_item")
                {
                    slot.transform.GetChild(0).GetComponent<Image>().sprite =
                        Resources.Load<Sprite>("Inventory Items/" + DisplaySprite);
                    Destroy(gameObject);
                    break;
                }

                if (counter <= 7)
                {
                    counter++;

                    if (counter >= 7)
                    {
                        {
                            Debug.Log("You have choosen all your items.");

                            System.Threading.Thread.Sleep(5000);
                            Debug.Log("Waiting 5 second.");

                            PlayerItems = GameObject.FindGameObjectsWithTag("ChoosenItem");

                            for (j = 0; j < 8; j++)
                            {
                                Debug.LogFormat("Item[{0}] = {1}", j, PlayerItems[j].GetComponent<Image>().sprite.name);
                            }
                        }
                    }
                }
            }
        }
    }

Я ожидаю, что результат будет:

Item[0] = key_yellow
Item[1] = 2 spades
Item[2] = RocketSprite
Item[3] = color paper
Item[4] = 4 diamonds
Item[5] = CoinSprite
Item[6] = TruckChassisSprite
Item[7] = MagnetSprite

Фактический результат:

Item[0] = key_yellow
Item[1] = 2 spades
Item[2] = RocketSprite
Item[3] = color paper
Item[4] = 4 diamonds
Item[5] = CoinSprite
Item[6] = TruckChassisSprite
Item[7] = empty_item

1 Ответ

0 голосов
/ 30 января 2019

Вы пробовали пройти по своему коду?После обработки вашего первого элемента counter будет установлен на 1. Продолжая, после обработки вашего седьмого элемента, counter будет установлен на 7, и элементы будут распечатаны.

Попробуйте изменить

if (counter >= 7)

до

if (counter > 7)

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