Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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# 如何在阵列Unity3d中存储游戏对象_C#_Unity3d - Fatal编程技术网

C# 如何在阵列Unity3d中存储游戏对象

C# 如何在阵列Unity3d中存储游戏对象,c#,unity3d,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

如何将游戏对象/图像存储在一个数组中,这样我就可以使用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;

[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;
    }
}

您似乎希望不同的图像使用不同的颜色。例如,您可以将图像和颜色分组在一起

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;
    }
}

有趣的是,最好的方法就是你如何拥有它

只有一件事你得不到:

当您想要突出显示一件事情时,编程模式是将它们全部关闭,然后只打开一件

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

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;

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);

颜色和图像之间的关系是什么?只有第一个是绿色的,另一个是白色的,不是吗?只是图像的颜色会在拾取时变为绿色。注意,作为一项规则,永远不要统一使用数组。使用列表。这是不是意味着像这样的独家选择?就像你选择的一个变绿,其他所有变白,如果你点击另一个,这个变绿,其他变白/保持白色?@GunnarB是的,我相信就是这么简单。OP只是不知道全关/一开的基本诀窍。OP错误地认为应该使用a来表示某种类型的结构,因此询问如何做到这一点。颜色和图像之间的关系是什么?只有第一个是绿色的,另一个是白色的,不是吗?只是图像的颜色会在拾取时变为绿色。注意,作为一项规则,永远不要统一使用数组。使用列表。这是不是意味着像这样的独家选择?就像你选择的一个变绿,其他所有变白,如果你点击另一个,这个变绿,其他变白/保持白色?@GunnarB是的,我相信就是这么简单。OP只是不知道全关/一开的基本诀窍。OP错误地认为应该使用某种类型的for结构,因此询问如何执行此操作。我尝试了您的第一个代码,但收到一条错误消息,称无法使用集合初始值设定项初始化“UnityEngine.UI.Image[]”类型的对象。。帮助..我想它缺少一个新的属性。我也将属性更改为字段,所以括号初始化中断,抱歉。正在更正。我尝试了您的第一个代码,但收到一个错误,错误是无法使用集合初始值设定项初始化“UnityEngine.UI.Image[]”类型的对象。。帮助..我想它缺少一个新的属性。我也将属性更改为字段,所以括号初始化中断,抱歉。对,应该有一本书介绍25个最巧妙的软件工程技巧。必须有人指出,即使是最有天赋的自然程序员自己也不会想到这种模式。没错,应该有一本书介绍25种最巧妙的软件工程技巧。必须有人指出,即使是最有天赋的自然程序员自己也不会想到这种模式。