如何在数组中存储游戏对象/图像,以便在更改图像颜色时使用"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));
}
有趣的是,最好的方法是你已经拥有了它
只有一件事你没有得到:
当您想要"突出显示一件事"时,编程模式是将它们全部关闭,然后只打开一个。
这是一个基本的编程技巧:
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);
对于不同的图像,您似乎想要不同的颜色。例如,您可以将图像和颜色组合在一起。
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;
}
}