public void PlaceIconToSlot() //gets called by a button
{
GameObject IconClone = Instantiate(Icons[properIconIndex], Slots[properSlotIndex].transform.position, Quaternion.identity);
}
图标和插槽是阵列。第一个告诉程序要实例化什么,第二个告诉程序实例化。 Quaternion.identity只意味着没有轮换。
我要做的是:复制图像并将其放在插槽中,如果另一个图像放在旧图像的顶部,则旧图像应该被销毁。
发生了什么:一切都有效,除了旧的没有被摧毁而新的一个坐在旧的上面。我的意思是它当然没有被破坏,因为我没有编程,但这是我的问题。当只有IconClone时,如何销毁(OldClone)?如何向函数引入OldClone的概念?
答案 0 :(得分:2)
由于您调用函数PlaceIconToSlot
我猜,您可能有一个Slot
组件。如果是这样,您可以向其中添加一个包含当前图标的成员变量(假设它是每个插槽的一个图标),然后使用它。
这样的事情:
public class Slot
{
public GameObject Icon;
public void PlaceIconToSlot()
{
// If you overwrite it, the garbage collector will destroy it a some point anyways,
// but it doesn't hurt to do this destroy call
Destroy(Icon);
Icon = Instantiate(...);
}
}
如果您在某个集中点上方运行,则可能会将参数(新图标实例化)传递给此函数。类似于SpotXYZ.PlaceIcon(icon)
或SpotXYZGameObject.GetComponent<Slot>().PlaceIcon(icon)
。
答案 1 :(得分:1)
一个想法是为原始图像设置标记(假设oldImage
)。实例化时,使用该标记销毁对象,然后将oldImage
标记添加到新图像中,以便在实例化其他图像时将其销毁。
public void PlaceIconToSlot() //gets called by a button
{
GameObject IconClone = Instantiate(Icons[properIconIndex], Slots[properSlotIndex].transform.position, Quaternion.identity);
Destroy(GameObject.FindWithTag("oldImage"));
IconClone.gameObject.tag="oldImage";
}
我没有尝试过,但值得一去!