需要解决实例化游戏对象的问题

问题描述 投票:0回答:1

我有这个问题,我不知道如何解决,这非常令人困惑。我希望每次实例化游戏对象时,它都会获得一种随机颜色,但是这些克隆都与上一个相同。预制物体产生并获得随机颜色,现在下一个物体产生,olso获得随机颜色,但第一个物体获得其颜色,我知道这非常令人困惑!enter image description here

这是门的代码:public Material []材料;公共Color []颜色;

public void ColorChange()
{
    colors = new[] {
    Color.blue,
    Color.black,
    Color.red,
    Color.green,
    Color.yellow,
    Color.white,
    Color.magenta,
    Color.cyan,
    Color.grey };

    var rnd = new System.Random();
    var randomColors = colors.OrderBy(x => rnd.Next()).ToArray();

    for (var i = 0; i < material.Length; i++)
    {
        material[i].color = randomColors[i];

    }

}
private void Start()
{

    ColorChange();
}

以及生成器的脚本:公共GameObject Gate; //游戏对象

private float timeBtwSpawn;
public float startTimeBtwSpawn;
public float decreaseTime;
public float minTime = 0.65f;

void Start()
{

}
void Update()
{
    if (timeBtwSpawn <= 0)
    {
        Instantiate(Gate, transform.position, Quaternion.identity);

        timeBtwSpawn = startTimeBtwSpawn;
        if (startTimeBtwSpawn > minTime)
        {
            startTimeBtwSpawn -= decreaseTime;
        }

    }
    else
    {
        timeBtwSpawn -= Time.deltaTime;
    }
}
c# unity3d
1个回答
0
投票

材料在GameObjects之间共享,因此,如果更改材质的颜色-使用该材质的所有对象都将获得新的颜色。

以下是解决此问题的几种方法:

您可以签出MaterialPropertyBlock

在要使用相同材质但属性稍有不同的多个对象绘制的情况下使用它。例如,如果要稍微更改每个绘制的网格的颜色。


通过创建多种材料并选择随机材料来解决它。 (这是您所做的,但是您正在重新使用材质并再次覆盖它们,这将更改以前的GameObject)]


或者您可以在运行时中创建新材料。


但是我认为最简单的方法应该是:

mySpawnedGameObject.GetComponent<Renderer>().material.color = randomColor;

与使用material.sharedMaterial相反。这仅适用于您选择的一个GameObject。

© www.soinside.com 2019 - 2024. All rights reserved.