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


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

图标和插槽是数组。第一个告诉程序要实例化什么,第二个告诉程序在哪里实例化。Quaternion.identity只是意味着没有旋转。

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

发生了什么:一切都正常,除了旧的不会被摧毁,新的坐在旧的之上。我的意思是,它当然不会被破坏,因为我没有编程,但这是我的问题。当只有一个图标克隆时,如何销毁(旧克隆(?如何在函数中引入 OldClone 的概念?

由于您调用该函数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).

一个想法是设置一个标签(假设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";
}

我还没有尝试过这个,但值得一试!

最新更新