从代码中填充库存时,设置图像的父级。

问题描述 投票:0回答:1

我正在为我的游戏开发一个库存系统。我已经设置好了UI,我有这个。

UI Initial state

如你所见,我有一个袋子面板,里面有很多插槽,就是你在图片右边看到的插槽。

我是这样填充的。

                inventoryPanel.SetActive(true);
                GameObject bagObject= GameObject.Find("Bag");
                List<GameObject> childrens = new List<GameObject>();
                Transform[] listSlots = bagObject.GetComponentsInChildren<Transform>();
                foreach(Transform child in listSlots)
                {
                    if(!child.gameObject.name.Equals(bagObject.name))
                    childrens.Add(child.gameObject);
                }
                for (int i = 0; i < character.ItemsInInventory.Count; i++)
                {
                    if (character.ItemsInInventory[i] != -1)
                    {

                        GameObject slot = childrens[i];
                        print("Slot: " + slot.name);
                        Image imagen = childrens[i].GetComponent<Image>();
                        string ruta = GetRutaSprite(character.ItemsInInventory[i]);
                        Sprite icono = Resources.Load<Sprite>(ruta);
                        imagen.name = "Item";
                        imagen.sprite = icono;
                        print("parent is " + slot.name);
                        imagen.transform.SetParent(slot.transform);
                    }
                }

当我运行这个时,我得到了这个。

Running

如你所见,Slot0已经消失了,它被Item所取代。我想实现的是Item是Slot0的儿子。我不知道为什么会发生这种情况,因为我将图像的父级设置为槽。在 print("Slot: " + slot.name); 行打印 "Slot0",但在 print("parent is " + slot.name); 行,它打印的是项目。为什么会这样?另外,剑看起来像是在什么东西后面...没有正确显示。我想显示图标和槽的边框。

我怎样才能正确地填充我的库存?

unity3d
1个回答
1
投票

在你的代码中,你只要找到槽,得到一个图片(就是边框),然后用你的物品sprite替换上面的sprite。

你需要实例化一个新的图像来代替。它可以是一个预制的,或者你可以使用你的边框图像来创建一个副本(不要忘记改变颜色)。或者,如果你在槽内有一个单独的图像,而你想为它设置精灵,你需要在它上获得参考,而不是在边框上。为此,你需要在你的slot上添加一个脚本,以保持该引用。

如果要对你的代码做一个最小的改动,你可以这样做。

Sprite icono = Resources.Load<Sprite>(ruta);
Image newImage = Instantiate(imagen, slot.transform);
                        newImage .name = "Item";
                        newImage .sprite = icono;
                        print("parent is " + slot.name);
                        newImage.transform.SetParent(slot.transform);

但我还是建议你重新修改一下: 至少,在你的插槽上添加一个脚本,保留对第二个图像的引用(不是边界)。

© www.soinside.com 2019 - 2024. All rights reserved.