Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/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,在我的游戏中,我有一个产卵器,它多次实例化一个游戏对象(游戏就像一个跑步者)。现在这个gameObject有一个脚本,它有void Start(),在void Start中它有一个函数,使游戏对象采用随机颜色。每次我运行游戏时,第一个预制件采用一种颜色(如绿色),然后第二个预制件采用另一种颜色(如红色)-但第一个对象采用第二个对象的颜色,就像它多次启动空一样。如何解决这个问题?您可以使用一个简单的静态计数器,例如 private static Color[] colors = new []{

在我的游戏中,我有一个产卵器,它多次实例化一个
游戏对象
(游戏就像一个跑步者)。现在这个
gameObject
有一个脚本,它有
void Start()
,在void Start中它有一个函数,使游戏对象采用随机颜色。每次我运行游戏时,第一个预制件采用一种颜色(如绿色),然后第二个预制件采用另一种颜色(如红色)-但第一个对象采用第二个对象的颜色,就像它多次启动空一样。如何解决这个问题?

您可以使用一个简单的
静态计数器,例如

private static Color[] colors = new []{ 
    Color.green, 
    Color.red, 
    Color.blue, 
    Color.yellow, 
    Color.black 
};

private static int index = 0;

private void Start()
{
    if(index => colors.Length)
    {
        Debug.LogError("Not enough colors!", this);
        return;
    }

    GetComponent<Renderer>().material.color = colors[index]; 
    index++;
}
private static Color[]colors=new[]{
颜色,绿色,
颜色,红色,
颜色,蓝色,
颜色,黄色,
颜色:黑色
};
私有静态int索引=0;
私有void Start()
{
如果(索引=>colors.Length)
{
LogError(“没有足够的颜色!”,这);
回来
}
GetComponent().material.color=颜色[索引];
索引++;
}
或者,如果你希望它是随机的,就像你说的那样

private static Color[] colors = new []{ 
    Color.green, 
    Color.red, 
    Color.blue, 
    Color.yellow, 
    Color.black 
};

private static int index = 0;

private void Start()
{
    if(index => colors.Length)
    {
        Debug.LogError("Not enough colors!", this);
        return;
    }

    if(index == 0)
    {
        // the first time shuffle up the array
        var rnd = new Random();
        colors = colors.OrderBy((c) => rnd.Next()).ToArray();
    }

    GetComponent<Renderer>().material.color = colors[index]; 
    index++;
}
private static Color[]colors=new[]{
颜色,绿色,
颜色,红色,
颜色,蓝色,
颜色,黄色,
颜色:黑色
};
私有静态int索引=0;
私有void Start()
{
如果(索引=>colors.Length)
{
LogError(“没有足够的颜色!”,这);
回来
}
如果(索引==0)
{
//第一次洗牌数组
var rnd=新随机数();
colors=colors.OrderBy((c)=>rnd.Next()).ToArray();
}
GetComponent().material.color=颜色[索引];
索引++;
}
或者,如果你真的希望它完全随机,你可以简单地做(可能有多个“相等”或非常相似的结果)

private void Start()
{
GetComponent().material.color=GetCompletelyRandomColor();
}
私有静态颜色GetCompletelyRandomColor()
{
var r=随机范围(0f,1f);
var g=随机范围(0f,1f);
var b=随机范围(0f,1f);
返回新颜色(r、g、b);
}

请提供一些代码示例,并尝试以更易读的方式设置问题的格式。
private void Start()
{
    GetComponent<Renderer>().material.color = GetCompletelyRandomColor();
}

private static Color GetCompletelyRandomColor()
{
    var r = Random.Range(0f, 1f);
    var g = Random.Range(0f, 1f);
    var b = Random.Range(0f, 1f);

    return new Color(r, g, b);
}