如何在一个阵列Unity3d中存储游戏对象

时间:2016-04-12 12:25:10

标签: c# unity3d

如何将游戏对象/图像存储在数组中,以便我可以使用" for循环"改变图像的颜色而不是个人改变颜色..我在unity3d中使用c#..

我的代码:

public Image clay, sand, loam, silt, siltyClay, siltyLoam, loamySand,   sandyLoam, siltyClayLoam;

public void imageColor(){
        sand.color = Color.green;
        clay.color = Color.white;
        loam.color = Color.white;
        silt.color = Color.white;
        siltyClay.color = Color.white;
        siltyLoam.color = Color.white;
        loamySand.color = Color.white;
        sandyLoam.color = Color.white;
        siltyClayLoam.color = Color.white;
        mountTex = (Texture)Resources.Load("sand", typeof(Texture));
}

2 个答案:

答案 0 :(得分:5)

有趣的是,最好的方法就是你已经拥有它。

你只有一件事没有得到:

当你想要突出显示一件事情时,编程模式将它们全部关闭,然后再转动上的那个。

这是一个基本的编程技巧:

public Image clay, sand, loam, silt, siltyClay,
   siltyLoam, loamySand, sandyLoam, siltyClayLoam;

private void AllOff()
    {
    sand.color = Color.white;
    clay.color = Color.white;
    loam.color = Color.white;
    silt.color = Color.white;
    siltyClay.color = Color.white;
    siltyLoam.color = Color.white;
    loamySand.color = Color.white;
    sandyLoam.color = Color.white;
    siltyClayLoam.color = Color.white;
    }

public Highlight( Image x )
    {
    AllOff();
    x.color = Color.green;
    }

使用..

Highlight( silt );

有问题的九个项目实际上不是一个列表 - 所以不要那样使用它们。

请注意,在其他情况下,您应该这样做:

  public Image[] images;

尝试并看看,在Inspector中你可以将它们拖入。

要一次性处理它们,它只是

foreach (Image i in images)
  Debug.Log(i);

答案 1 :(得分:1)

您似乎想要为不同的图像使用不同的颜色。你可以,例如将图像和颜色组合在一起。

public Image clay, sand, loam, silt, siltyClay, siltyLoam, loamySand, sandyLoam, siltyClayLoam;

[System.Serializable]
public class ImageColorPairs
{
    public Image[] images {get;set; } /* associate Images */
    public Color targetColor { get; set; } /* ..with a target color */
}

private ImageColorPairs[] pairs; //Declare here but initialize later. Can't initialize these objects (error: referencing non-static field..)

public void InitializePairsOnce()
{
    /* Make up array of Pairs here */
    pairs = new ImageColorPairs[] {
        new ImageColorPairs() { images = new Image[] { sand }, targetColor = Color.green } ,
        new ImageColorPairs() { images = new Image[] { clay, loam, silt, siltyClay, siltyLoam, loamySand, sandyLoam, siltyClayLoam }, targetColor = Color.white }
 };
}

public void ImageColor()
{
    /* Now setting the colors is easy! :) */
    foreach (var pair in pairs)
    {
        foreach (var image in pair.images)
        {
            image.color = pair.targetColor;
        }
    }
}

您还可以使用更多基本数据结构,例如您自己的ImageTuple,然后将每个图像单独关联一种颜色。但是那里你似乎只有两个基本组,所以只需将一个颜色关联到整个图像阵列就不那么重要了。

有了这样的课程,你就可以这样做了

[System.Serializable]
public class ImageTuple
{
    public Image image;
    public Color targetColor;

    public ImageTuple(Image img, Color col)
    {
        image = img;
        targetColor = col;
    }
}
private ImageTuple[] imageTuples; 

public void InitializeTuplesOnce()
{
    imageTuples = new ImageTuple[]
    {
        new ImageTuple(clay, Color.green),
        new ImageTuple(sand, Color.white),
        //.. the rest
    };
}

public void ImageColor()
{
    foreach (var pair in imageTuples)
    {
        pair.image.color = pair.targetColor;
    }
}