2017-09-08 14 views
1

私は、ユニティプログラミングには新しく、以前はJavaで作成したパズルゲームを再作成しようとしています。 "競技場"を生成するために、私は0、1、2を含む2次元のリストを持っています。今、私は2dリストに対応する視覚的行列を作成したいと思います。2dリストに従ってプレハブをインスタンス化し、後で置き換えます。

私はまず、2dリストが特定の位置にある1または2に等しいときにビジュアルマトリックスでプレハブをインスタンス化し、正方形を作成します。しかし、今私の質問は、インスタンス化されたプレハブをどのように変更できますか?このゲームでは、2dリストの値を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)

:このスプライト1とsprite0で

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

matrix[2,3] = 0; 
objects[2,3].getComponent<SpriteRenderer>().sprite = 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; 
      } 
     } 
    } 
} 

に基づいてゲームオブジェクトの配列を視覚的に表現を変更します更新機能を作りますそれを実行します。コードを書いた方法は、行列配列とオブジェクト配列が公開されているかどうかに依存します。あなたは両方をパラメータとして取ることでこれを回避することができます。

また、前述したように、コードでpublic変数として宣言することで、スプライト0、スプライト1、スプライト2をインスペクタで設定することもできます。

+0

これは魅力的です。 – Willems

+0

助けてくれてうれしいです:P – Bhaskar

関連する問題