根据2d列表实例化预制件并在之后替换

时间:2017-09-08 18:55:51

标签: c# list unity3d

我是团结编程的新手,并尝试重新制作我曾用Java创建的益智游戏。生成"比赛场地"我有一个2d列表,其中包含0&1,1&2;和2' s。现在我想创建一个与2d列表对应的可视化矩阵。

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

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

1 个答案:

答案 0 :(得分:2)

让我们说这就是你实例化对象的方式

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

根据对矩阵的更改,您可以通过几种方式进行更改。

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

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

matrix[2,3] = 0;
objects[2,3].getComponent<SpriteRenderer>().sprite = sprite0;

在这个sprite1中,sprite0可能会通过检查器设置,在代码中将它们声明为公共变量。

2)创建一个更新函数,它将根据整数数组

更改GameObject数组的可视化表示
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;
            }
        }
    }
}

使用此更新功能,只要您想更新矩阵的可视化表示,就可以运行它。请记住,我编写代码的方式取决于矩阵数组和公共对象数组。您可以将它们作为参数来解决这个问题。

另外,如前所述,您可能会通过检查器将sprite0,sprite1和sprite2设置为代码中的公共变量。

相关问题