2016-06-20 6 views
0

私は複数の四角からゲームボードを作成し、オンまたはオフに切り替えることができるグリッドを持つシンプルなプロジェクトを持っています。Unityはインスタンス化されたオブジェクトのトグルを表示または消滅させます

残念ながら、それはそのようには機能しません。私のボードマネージャーのコードは以下の通りです:

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 
using System.Collections.Generic; 

namespace BoardHandle { 
    [RequireComponent(typeof(SpriteRenderer))] 
    public class BoardManager : MonoBehaviour { 

     //2d list that represents the board 
     List<List<GameObject>> board = new List<List<GameObject>>(); 

     //Gamebjects import 
     public GameObject GrassTile; 
     public GameObject Grid; 

     //UI buttons import 
     public Toggle GridToggle; 

     //Miscellanious variables that could be edited in inspector 
     public int rows; 
     public int cols; 
     public float tileWidth; 
     public float tileHeight; 


     void Start() { 

      GrassTile.transform.localScale = new Vector3 (tileWidth, tileHeight, 0f); 
      Grid.transform.localScale = new Vector3 (tileWidth, tileHeight, 0f); 

      //Adds all of the stuff to the game board 
      for (int x = 0; x < cols; x++) { 
       board.Add (new List<GameObject>()); 
       for (int y = 0; y < rows; y++) { 
        board [x].Add (GrassTile); 
       } 
      } 


      //Makes board bits all go to the screen 
      for (int x = 0; x < board.Count; x++) { 
       for (int y = 0; y < board[x].Count; y++) { 

        //Makes the grid. And it stays there currently until the game ends. 
        Instantiate (Grid, 
           new Vector3 (x * tileWidth, y * tileHeight, 0), 
           Quaternion.identity); 

        //This is the actual board, filled with grass tiles. I wnat to keep this. 
        Instantiate (board [x] [y], 
           new Vector3 (x * tileWidth, y * tileHeight, 0), 
           Quaternion.identity); 
       } 
      } 
     } 


     void Update() { 

     } 


    } 
} 

私のゲームプログラミングの経験は、Pygameのものです。 Pygameでは、バックグラウンドが常に再生されなければならないので、グリッドを消したい場合は、フレームごとに1回ブリッティングをやりなおすだけで、フレームは消えてしまいます。 1つのオブジェクトでは、コード内の背景を再生成することなくオブジェクトを移動できるため、グリッドは1つのインスタンス化の後にとどまります。 GridToggle.isOnがtrueの場合、グリッドはインスタンス化され、GridToggle.isOnがfalseになるまでそこにとどまる方法を知りたいだけです。GridToggle.isOnはfalseになります。グリッドが再びオンになるまでグリッドが存在しなくなります。ありがとうございました!

答えて

1

Unityでは、ゲームオブジェクトを無効にすることができ、コンポーネントを無効にすることができます。

ゲームオブジェクトが非アクティブ化されている場合、それは「存在しない」とみなされます。レンダリングを無効にするだけの場合は、タイルのレンダラーコンポーネントを無効にすることもできます。最初のオプションのような音は、あなたが望むものです。

GameObjectを無効にすると、その子GameObjectも非アクティブになります。ボードとその内容を無効にするには、インスタンス化されたオブジェクトをボードの子として持つことをお勧めします。あなたは、ゲームオブジェクトの変換を介してこれを行うことができます。

instantiatedGameObject.transform.parent = this.transform; 

あなたがトグルを使用しているので、あなたはそれにイベントリスナーを追加することができます。

GridToggle.onValueChanged.AddListener((value) => this.SetActive(value)); 
+0

私はこれを試してみましょう。ありがとうございました! – Demandooda

+0

Cool。しかし、私はレンダラーを別のスクリプトからリモートで無効にするにはどうしたらよいでしょうか。グリッドは別のスクリプトから管理され、プレハブです。 – Demandooda

+0

Toggleではなく、別のスクリプトで制御したいのですか?もしあなたがBoardHandleを持つGameObjectへの参照を持っているならば、他のスクリプトからそれを単純に無効にすることができます。 – Lof

関連する問題