вместо префаба создается клон префаба 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();
}
}
Надеюсь поможет
