C# 根据2d列表实例化预制件,然后替换

C# 根据2d列表实例化预制件,然后替换,c#,list,unity3d,C#,List,Unity3d,我是unity编程新手,尝试重新创建我曾经用Java创建的益智游戏。要生成“比赛场地”,我有一个2d列表,其中包含0、1和2。现在我想创建一个与2d列表相对应的可视矩阵 当2d列表在特定位置上等于1或2时,我首先在可视矩阵中实例化一个预置,创建一个正方形。但现在我的问题是如何更改实例化的预置?游戏要求我将2d列表中的值从1更改为0,反之亦然,这也意味着视觉表现应该更改 所以我的问题是,做这件事的最佳方式是什么?如果需要,我如何更改已经创建的预制件?(有没有办法命名或引用它们或其他东西?假设这就是

我是unity编程新手,尝试重新创建我曾经用Java创建的益智游戏。要生成“比赛场地”,我有一个2d列表,其中包含0、1和2。现在我想创建一个与2d列表相对应的可视矩阵

当2d列表在特定位置上等于1或2时,我首先在可视矩阵中实例化一个预置,创建一个正方形。但现在我的问题是如何更改实例化的预置?游戏要求我将2d列表中的值从1更改为0,反之亦然,这也意味着视觉表现应该更改


所以我的问题是,做这件事的最佳方式是什么?如果需要,我如何更改已经创建的预制件?(有没有办法命名或引用它们或其他东西?

假设这就是实例化对象的方式

GameObject[,] objects = new GameObject[LENGTH, WIDTH];
for(int i = 0; i < LENGTH; i++){
    for(int j = 0; j < WIDTH; j++){
        objects[i, j] = (GameObject)Instantiate(Prefab);
        //Set position and do other initialization stuff here
    }
}
GameObject[,]objects=新的GameObject[长度、宽度];
for(int i=0;i
有几种方法可以根据对矩阵所做的更改进行更改

(一) 无论何时更改矩阵,只需直接更改对象的精灵:

matrix[1,2] = 1;
objects[1,2].getComponent<SpriteRenderer>().sprite = sprite1;

matrix[2,3] = 0;
objects[2,3].getComponent<SpriteRenderer>().sprite = sprite0;
矩阵[1,2]=1;
对象[1,2].getComponent().sprite=sprite1;
矩阵[2,3]=0;
对象[2,3].getComponent().sprite=sprite0;
在这种情况下,sprite1和sprite0可能通过检查器进行设置,方法是在代码中将它们声明为公共变量

2) 创建一个更新函数,该函数将基于整数数组更改游戏对象数组的视觉表示

void update(){
    for(int i = 0; i < LENGTH; i++){
        for(int j = 0; j < LENGTH; j++){
            switch(matrix[i, j]){
                case 0:
                    objects[i, j].getComponent<SpriteRenderer>().sprite = sprite0;
                    break;
                case 1:
                    objects[i, j].getComponent<SpriteRenderer>().sprite = sprite1;
                    break;
                case 2:
                    objects[i, j].getComponent<SpriteRenderer>().sprite = sprite2;
                    break;
            }
        }
    }
}
void update(){
for(int i=0;i
使用此更新函数,只要您想更新矩阵的可视表示形式,就可以运行它。请记住,我编写代码的方式取决于矩阵数组和对象数组是公共的。你可以把它们都当作参数来解决这个问题


此外,如前所述,您可能会通过在代码中将sprite0、sprite1和sprite2声明为公共变量来通过检查器进行设置。

很高兴这有帮助:p