有没有一种方法可以引用单个实例化的克隆对象



如果我实例化同一个实例的多个实例,比如说球对象,最终有20个球,我如何具体引用一个?例如,如果我想更改一个球克隆的颜色,销毁一个特定的克隆,或者访问附加到它的单个球克隆的特定变量,我该如何做到这一点?

所有克隆的对象只是在层次结构中显示为"克隆";ballgameobject(克隆(";。有办法把它们区分开来吗?

您可以在初始化过程中为每个Ball指定一个唯一的标识符。

public class Ball : MonoBehaviour
{
private readonly Guid id = Guid.NewGuid();
public Guid Id => id;
}

然后可以使用该id来唯一标识特定的球实例。

public class BallManager
{
private readonly Dictionary<Guid, Ball> instances = new Dictionary<Guid, Ball>();
public Ball CreateBall(Ball prefab)
{
var result = Object.Instantiate(prefab);
instances[result.Id] = result;
return result;
}
public void SetBallColor(Guid ballId, Color color)
{
instances[ballId].GetComponent<Renderer>().material.color = color;
}
public void DestroyBall(Guid ballId)
{
Object.Destroy(instances[ballId]);
instances.Remove(ballId);
}
}

UPDATE:如果id不需要在会话之间保持,那么实际上也可以只使用Object.GetInstanceID((.

private readonly Dictionary<int, Ball> instances = new Dictionary<int, Ball>();
public Ball CreateBall(Ball prefab)
{
var result = Object.Instantiate(prefab);
instances[result.GetInstanceID()] = result;
return result;
}

听起来你在Unity工作。你可以在Unity中对每个单独的gameObject执行此操作。你也应该在Unity中重新命名它们,这样它们就可以被区分开来。

您可以将克隆保存在一个数组中以供以后引用,如下所示:

void Start()
{
GameObject ball = new GameObject("Ball");   
GameObject[] clones = new GameObject[20];
for(int i = 0; i < 20; i++)
{
clones[i] = GameObject.Instantiate(ball);
clones[i].name = $"Ball_{i}";
}
//With the array indexer you can access each clone and can do whatever you want with it.
Destroy(clones[5]); // Destroys the fifth gameobject
}

相关内容

最新更新