C# 需要修复实例化游戏对象的问题
我有这个问题,我不知道如何解决它,这是非常混乱的。我希望每次我实例化游戏对象时,它都会得到一个随机颜色,但这些克隆从上一个克隆得到相同的颜色。就像第一个预制繁殖和获得随机颜色一样,现在下一个繁殖和olso获得随机颜色,但第一个得到它的颜色,我知道这很让人困惑! 这是登机门的代码: 公共材料[]材料; 公共颜色[]颜色C# 需要修复实例化游戏对象的问题,c#,unity3d,C#,Unity3d,我有这个问题,我不知道如何解决它,这是非常混乱的。我希望每次我实例化游戏对象时,它都会得到一个随机颜色,但这些克隆从上一个克隆得到相同的颜色。就像第一个预制繁殖和获得随机颜色一样,现在下一个繁殖和olso获得随机颜色,但第一个得到它的颜色,我知道这很让人困惑! 这是登机门的代码: 公共材料[]材料; 公共颜色[]颜色 public void ColorChange() { colors = new[] { Color.blue, Color.black, Col
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();
}
public void ColorChange()
{
颜色=新[]{
颜色,蓝色,
颜色,黑色,
颜色,红色,
颜色,绿色,
颜色,黄色,
颜色,白色,
颜色,洋红,
颜色,青色,
颜色:灰色};
var rnd=new System.Random();
var randomColor=colors.OrderBy(x=>rnd.Next()).ToArray();
对于(变量i=0;i
以及产卵器的脚本:
公共游戏对象门;//游戏对象
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;
}
}
private float timeBtwSpawn;
公众浮存的startTimeBtwSpawn;
公众浮存时间缩短;
公共浮点数minTime=0.65f;
void Start()
{
}
无效更新()
{
if(timeBtwSpawn minTime)
{
startTimeBtwSpawn-=递减时间;
}
}
其他的
{
timeBtwSpawn-=Time.deltaTime;
}
}
材质在游戏对象之间共享,因此如果更改材质的颜色-所有使用该材质的对象都将获得新颜色
以下是几种方法(请参阅最后一种以了解我的建议):
材料性能块 (在您的情况下不起作用) 您可以查看: 如果要使用相同的材质绘制多个对象,但属性稍有不同,请使用它。例如,如果要稍微更改绘制的每个网格的颜色 因为您正在使用这些材料,所以无法使用
预先创建的材质集 通过创建大量材质和选择随机材质来解决此问题 (这是您已经做过的,但由于您正在重复使用这些材料,因此不会起作用)
运行时的新材质 也可以在运行时创建新材质 (应该可以,但下一个更容易)
游戏对象的Renderer.material 但我认为最简单的方法应该是:
mySpawnedGameObject.GetComponent<Renderer>().material.color = randomColor;
MyPawnedGameObject.GetComponent().material.color=randomColor;
与使用
材质相反。sharedMaterial
。这应该只适用于您选择的一个游戏对象:尝试在类级别var rnd=new System.Random();。我的意思是成为班级成员