вместо префаба создается клон префаба unity2d

изачально у меня на сцене есть обьект монетки. и при входе в ее тригер она создает новую в рандомном месте рядом и удаляется старая. при спавне новой префабом у новой является она сама и поэтому новые создаются клонами клонов.

введите сюда описание изображения

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class coin : MonoBehaviour
{

    public int coins;
    public Text coinCounter;
    [SerializeField]
    public GameObject score;
    float randoX;
    private Vector2 whereToSpawn;


    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            coins++;
            randoX = Random.Range(8f, 8f);
            whereToSpawn = new Vector2(randoX, transform.position.y);
            Instantiate(score, whereToSpawn, Quaternion.identity);
            Destroy(score.gameObject);
        }
    }

    private void Update()
    {
        coinCounter.text = coins.ToString();
    }
}


Ответы (2 шт):

Автор решения: Алексей Шиманский

Если я правильно понял, надо сделать так:

Destroy(gameObject);

Тогда будет удаляться именно тот объект в чей триггер зашли. А сейчас удаляется именно тот объект, из которого должно быть инстанциирование

→ Ссылка
Автор решения: SOOBATON

Попробуйте написать вот так

Возможно нужно поменять местами создание объекта и его уничтожение. И в методе Destroy() использовать имя переменной содержащей данный объект.

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class coin : MonoBehaviour
{

    public int coins;
    public Text coinCounter;
    [SerializeField]
    public GameObject score;
    float randoX;
    private Vector2 whereToSpawn;


    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            coins++;
            randoX = Random.Range(8f, 8f);
            whereToSpawn = new Vector2(randoX, transform.position.y);
            Destroy(score);
            Instantiate(score, whereToSpawn, Quaternion.identity);
        }
    }

    private void Update()
    {
        coinCounter.text = coins.ToString();
    }
}

Надеюсь поможет

→ Ссылка