Как провести различие между старым экземпляром объекта и новым? - PullRequest
0 голосов
/ 29 апреля 2018
 public void PlaceIconToSlot() //gets called by a button
{ 
    GameObject IconClone = Instantiate(Icons[properIconIndex], Slots[properSlotIndex].transform.position, Quaternion.identity);
}

Иконки и слоты являются массивами. Первый говорит программе, что создавать экземпляры, а второй - где создавать экземпляры. Quaternion.dentity просто означает отсутствие вращения.

Что я пытаюсь сделать: Дублируйте изображение и поместите его в слот, а затем, если другое изображение будет помещено поверх старого, старое должно быть уничтожено.

Что происходит: все работает, за исключением того, что старый не разрушается, а новый стоит поверх старого. Я имею в виду, конечно, это не разрушается, так как я не программировал это, но это мой вопрос. Как я могу уничтожить (OldClone), когда есть только IconClone? Как я могу ввести в функцию понятие OldClone?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Поскольку вы вызываете функцию 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).

0 голосов
/ 30 апреля 2018

Идея состоит в том, чтобы установить тег (скажем, 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";
}

Я не пробовал это, но оно того стоит!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...