Я использую массив для хранения всех игровых объектов с тегом "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