如何区分旧的实例化对象和新的实例化对象?

时间:2018-04-29 18:05:10

标签: c# unity3d

 public void PlaceIconToSlot() //gets called by a button
{ 
    GameObject IconClone = Instantiate(Icons[properIconIndex], Slots[properSlotIndex].transform.position, Quaternion.identity);
}

图标和插槽是阵列。第一个告诉程序要实例化什么,第二个告诉程序实例化。 Quaternion.identity只意味着没有轮换。

我要做的是:复制图像并将其放在插槽中,如果另一个图像放在旧图像的顶部,则旧图像应该被销毁。

发生了什么:一切都有效,除了旧的没有被摧毁而新的一个坐在旧的上面。我的意思是它当然没有被破坏,因为我没有编程,但这是我的问题。当只有IconClone时,如何销毁(OldClone)?如何向函数引入OldClone的概念?

2 个答案:

答案 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";
}

我没有尝试过,但值得一去!