我有这个问题,我不知道如何解决,这非常令人困惑。我希望每次实例化游戏对象时,它都会获得一种随机颜色,但是这些克隆都与上一个相同。预制物体产生并获得随机颜色,现在下一个物体产生,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;
}
}
材料在GameObjects之间共享,因此,如果更改材质的颜色-使用该材质的所有对象都将获得新的颜色。
您可以签出MaterialPropertyBlock:
在要使用相同材质但属性稍有不同的多个对象绘制的情况下使用它。例如,如果要稍微更改每个绘制的网格的颜色。
通过创建多种材料并选择随机材料来解决它。 (这是您所做的,但是您正在重新使用材质并再次覆盖它们,这将更改以前的GameObject)]
或者您可以在运行时中创建新材料。
但是我认为最简单的方法应该是:
mySpawnedGameObject.GetComponent<Renderer>().material.color = randomColor;
与使用material.sharedMaterial
相反。这仅适用于您选择的一个GameObject。