Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要修复实例化游戏对象的问题_C#_Unity3d - Fatal编程技术网

C# 需要修复实例化游戏对象的问题

C# 需要修复实例化游戏对象的问题,c#,unity3d,C#,Unity3d,我有这个问题,我不知道如何解决它,这是非常混乱的。我希望每次我实例化游戏对象时,它都会得到一个随机颜色,但这些克隆从上一个克隆得到相同的颜色。就像第一个预制繁殖和获得随机颜色一样,现在下一个繁殖和olso获得随机颜色,但第一个得到它的颜色,我知道这很让人困惑! 这是登机门的代码: 公共材料[]材料; 公共颜色[]颜色 public void ColorChange() { colors = new[] { Color.blue, Color.black, Col

我有这个问题,我不知道如何解决它,这是非常混乱的。我希望每次我实例化游戏对象时,它都会得到一个随机颜色,但这些克隆从上一个克隆得到相同的颜色。就像第一个预制繁殖和获得随机颜色一样,现在下一个繁殖和olso获得随机颜色,但第一个得到它的颜色,我知道这很让人困惑!

这是登机门的代码: 公共材料[]材料; 公共颜色[]颜色

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();。我的意思是成为班级成员