【发布时间】:2019-01-30 13:54:01
【问题描述】:
我正在使用一个数组来存储所有带有“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
【问题讨论】:
-
很难看出你的代码有什么问题,因为它是一个较大的代码库的摘录,孤立地不容易理解。我最好的猜测是将
if (counter >= 7)更改为if (counter > 7)会解决您的问题。第二个if的主体中的代码将在循环的第七次迭代中执行,因为它发生在 递增counter。 -
您能否说明将标签
ChoosenItem分配给GameObjects 的位置/方式? -
你在第 7 项告诉他们他们的 inv 已满而不是 8..
-
我在统一引擎中创建了一个名为“ChoosenItem”的标签,并将其附加到每个库存槽项目。和你可以使用的“玩家”标签是一样的。
-
不应该是“ChosenItems”吗?
标签: c# arrays unity3d inventory