Javascript 脚本将颜色从空的GameObject设置为多个对象,而不是子对象的颜色,并且不是随机的

Javascript 脚本将颜色从空的GameObject设置为多个对象,而不是子对象的颜色,并且不是随机的,javascript,c#,unity3d,unityscript,unity5,Javascript,C#,Unity3d,Unityscript,Unity5,我制作了一个c#脚本,用于设置对象的颜色(在本例中为瓷砖)。问题是它为多个对象设置颜色,而不是仅为一个对象设置颜色。有人有解决办法吗?有javascript知识的人也可以回答 编辑:我稍微更新了我的代码。我想把事情弄清楚。 我有16个对象(平铺),它们是一个空游戏对象(平铺)的子对象。 每1.5秒(例如),我只希望一块瓷砖随机改变颜色 编辑我更新了我的问题,并在下面的答案中发布了解决方案/脚本 private float timer = 0.0f; Color red = Color.red;

我制作了一个c#脚本,用于设置对象的颜色(在本例中为瓷砖)。问题是它为多个对象设置颜色,而不是仅为一个对象设置颜色。有人有解决办法吗?有javascript知识的人也可以回答

编辑:我稍微更新了我的代码。我想把事情弄清楚。 我有16个对象(平铺),它们是一个空游戏对象(平铺)的子对象。 每1.5秒(例如),我只希望一块瓷砖随机改变颜色

编辑我更新了我的问题,并在下面的答案中发布了解决方案/脚本

private float timer = 0.0f;

Color red = Color.red;
Color blue = Color.blue;
Color green = Color.green;
Color white = Color.white;

public Transform tiles;

void Update () 
{       
    timer += Time.deltaTime;

    if (timer >= 1.5f)//change the float value here to change how long it takes to switch.
    {

        Transform tile = tiles.GetChild (Random.Range (0, 16));

        int rand = Random.Range (1, 4);


            if (rand == 1) {
                tile.GetComponent<Renderer> ().material.color = red;
            } else if (rand == 2) {
                tile.GetComponent<Renderer> ().material.color = blue;
            } else {
                tile.GetComponent<Renderer> ().material.color = green;
            }
        timer = 0;
    }
}
private float timer=0.0f;
Color red=Color.red;
Color blue=Color.blue;
颜色绿色=Color.green;
颜色白色=颜色白色;
公共瓷砖;
无效更新()
{       
timer+=Time.deltaTime;
if(timer>=1.5f)//更改此处的浮点值以更改切换所需的时间。
{
Transform tile=tiles.GetChild(Random.Range(0,16));
int rand=随机范围(1,4);
如果(rand==1){
tile.GetComponent().material.color=红色;
}else if(rand==2){
tile.GetComponent().material.color=蓝色;
}否则{
tile.GetComponent().material.color=绿色;
}
定时器=0;
}
}

请阅读本手册

特别是“整数”部分,内容如下:注意
max
是独占的,因此使用
Random.Range(0,10)
返回0到9之间的值

将代码更新为

int rand = Random.Range(1, 4);
另一方面,指定使用将值钳制在
0.0f
1.0f
之间的
float
创建颜色。因此,您可以重写您的声明:

Color red   = new Color(1.0f, 0.0f, 0.0f, 1.0f);
Color green = new Color(0.0f, 1.0f, 0.0f, 1.0f);
Color blue  = new Color(0.0f, 0.0f, 1.0f, 1.0f);
Color white = new Color(1.0f, 1.0f, 1.0f, 1.0f);
或使用:


好了,我终于有了解决办法。我打算把它贴在这里,以防将来有人需要它

因此,简而言之,脚本每1.5秒为随机平铺提供一种颜色(红色、绿色或蓝色)每个磁贴都是我的空磁贴对象的子对象,称为磁贴。这是随机选择的。瓷砖也有标签,因为它是我游戏的一部分

//PUBLIC VARIABLES
public Transform tiles;

//PRIVATE VARIABLES
private Transform tile;
private float timer = 0.0f;

//COLORS
Color red = Color.red;
Color blue = Color.blue;
Color green = Color.green;

void Start(){       
    tile = tiles.GetChild (Random.Range (0, 16));
    }

void Update () 
{       
    GOsWithTag = GameObject.FindGameObjectsWithTag ("Colored Tile");
    timer += Time.deltaTime;

    if (timer >= 1.5f)//change the float value here to change how long it takes to switch.
    {
        SetRandom ();
        int rand = Random.Range (1, 4);


        if (rand == 1) {
            tile.GetComponent<Renderer> ().material.color = red;
            this.tile.gameObject.tag = "Colored Tile";
        } else if (rand == 2) {
            tile.GetComponent<Renderer> ().material.color = blue;
            this.tile.gameObject.tag = "Colored Tile";              
        } else {
            tile.GetComponent<Renderer> ().material.color = green;
            this.tile.gameObject.tag = "Colored Tile";
        }

        timer = 0;
    }// CLOSING FIRST IF STATEMENT

    GameOver ();

} //CLOSING Update()

void SetRandom(){
    for (float r = 0.0f; r < 9999; r += 1.5f * Time.deltaTime){
        int nRand = Random.Range(0, 16);
        tile = tiles.GetChild (nRand);
    }           
}
//公共变量
公共瓷砖;
//私有变量
私有转换砖;
专用浮点计时器=0.0f;
//颜色
Color red=Color.red;
Color blue=Color.blue;
颜色绿色=Color.green;
void Start(){
tile=tiles.GetChild(Random.Range(0,16));
}
无效更新()
{       
GOsWithTag=GameObject.FindGameObjectsWithTag(“彩色瓷砖”);
timer+=Time.deltaTime;
if(timer>=1.5f)//更改此处的浮点值以更改切换所需的时间。
{
SetRandom();
int rand=随机范围(1,4);
如果(rand==1){
tile.GetComponent().material.color=红色;
this.tile.gameObject.tag=“有色瓷砖”;
}else if(rand==2){
tile.GetComponent().material.color=蓝色;
this.tile.gameObject.tag=“有色瓷砖”;
}否则{
tile.GetComponent().material.color=绿色;
this.tile.gameObject.tag=“有色瓷砖”;
}
定时器=0;
}//关闭第一个IF语句
GameOver();
}//正在关闭更新()
void SetRandom(){
对于(浮动r=0.0f;r<9999;r+=1.5f*时间增量){
int nRand=随机范围(0,16);
tile=tiles.GetChild(nRand);
}           
}

如果您不确定如何执行此操作,那么在Unity中开始执行此操作的最简单方法是在代码中添加
Debug.Log()
调用,然后确定代码是否没有按照您的想法执行。我知道如何调试,但不知道应该登录到控制台中。我尝试了
Debug.Log(tile)
Debug.Log(tiles)
这两种方法,它们都给了我输出“Object”。对,还有
float
版本的Range,max是包含的,但对于
int
版本就不是这样了。我认为像“Array.Length”这样的东西可以在最大位置使用,它产生的大小比数组的最后一个索引大一个。感谢提供有用的信息。真正的问题仍然存在。我怎样才能给一个单一的颜色,直到你们只想让16个随机对象每1.5秒反复改变一次?是的。16个对象是一个名为“tiles”的空游戏对象的子对象。我想每x秒修改一次,如果我理解正确,你可以移动
Transform tile=tiles.GetChild(Random.Range(0,16))
void Start(){}
函数。
//PUBLIC VARIABLES
public Transform tiles;

//PRIVATE VARIABLES
private Transform tile;
private float timer = 0.0f;

//COLORS
Color red = Color.red;
Color blue = Color.blue;
Color green = Color.green;

void Start(){       
    tile = tiles.GetChild (Random.Range (0, 16));
    }

void Update () 
{       
    GOsWithTag = GameObject.FindGameObjectsWithTag ("Colored Tile");
    timer += Time.deltaTime;

    if (timer >= 1.5f)//change the float value here to change how long it takes to switch.
    {
        SetRandom ();
        int rand = Random.Range (1, 4);


        if (rand == 1) {
            tile.GetComponent<Renderer> ().material.color = red;
            this.tile.gameObject.tag = "Colored Tile";
        } else if (rand == 2) {
            tile.GetComponent<Renderer> ().material.color = blue;
            this.tile.gameObject.tag = "Colored Tile";              
        } else {
            tile.GetComponent<Renderer> ().material.color = green;
            this.tile.gameObject.tag = "Colored Tile";
        }

        timer = 0;
    }// CLOSING FIRST IF STATEMENT

    GameOver ();

} //CLOSING Update()

void SetRandom(){
    for (float r = 0.0f; r < 9999; r += 1.5f * Time.deltaTime){
        int nRand = Random.Range(0, 16);
        tile = tiles.GetChild (nRand);
    }           
}