簡體   English   中英

根據二維列表實例化預制件,然后替換

[英]Instantiate prefabs according to a 2d list and replace afterwards

我是統一編程的新手,試圖重新創建曾經用Java創建的益智游戲。 為了生成“比賽場地”,我有一個二維列表,其中包含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
    }
}

您可以通過幾種方法根據對矩陣所做的更改進行更改。

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聲明為代碼中的公共變量來設置它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM