2016-04-16 6 views
0

これを行うために自分のシーンを設定する方法とちょっと混乱します。クラスSystemの配列を作成したいと思います。その中には、スプライトレンダラとゲームオブジェクトへの参照をVector3の位置に含むものがあります。私はまた、私の配列作成のその位置にゲームオブジェクトをインスタンス化します。クラスの配列を設定し、それをゲームオブジェクトにリンクする方法

私のセットアップ私のゲームの世界では、空のゲームオブジェクトでこのように私の配列:

public System[] systemArray; 
void Start() { 
    systemArray = new System[totalSystems]; 

    for (int i = 0; i < totalSystems; i++) 
    { 
     systemArray[i].worldPos = new Vector3(Random.Range(min,max),Random.Range(min,max), Random.Range(minZ,maxZ)); 
     Instantiate(systemObject,systemArray[i].worldPos,Quaternion.identity); 
    }  
} 

が今私のシステムスクリプトはそれだけでデータを格納するスクリプトであるゲームオブジェクトに添付ないです私が作ったインスタンス化されたゲームオブジェクトのコードは次のようになります。

public class System : MonoBehaviour { 

    public SpriteRenderer spriteRenderer; 
    public GameObject  gameObject; 
    public Vector3   worldPos; 

} 

私はこのすべてをどのようにリンクしていますか?

ここでの目標は、シーンからゲームオブジェクトを破壊できるようにすることですが、システムからVector3、GO、およびスプライトレンダラーにアクセスできるようになり、再びインスタンス化できるようになります。

私は本当に混乱しているので、これを効率的に設定する方法についていくつかの助けが必要だと思っています。

+0

ビットが混乱している場合は、必要なものと問題のどこに問題を置き換える必要があるかもしれません。 –

+0

要約すると、私はゲームのオブジェクトの束を作成し、それらの位置を設定し、スプライトレンダラへの参照を持っているので、私は再びゲームを再インスタンス化したいかもしれないので、将来のある点。 – WDUK

+0

ちょっと正式な注記:クラスに「System」という名前を付けないでください。これはトップレベルの.net名前空間です。 'GameSystem'のようなものは、それほど簡単ではありません。 @ GunnarB。 –

答えて

0

システムの保守を担当する別個のクラスを作成します。 ベストプラクティスのために、クラスはシステムのコレクションを直接公開するのではなく、ロジックで操作を飾ることができるメソッドを公開します。

それはこのようなものになります。

public class SystemRepository 
{ 
    private static List<System> _systems; 

    public List<System> GetAll() { 
     if (_systems == null) { 
      _systems = new List<System>() 
     } 

     // Further logic 

     return _systems 
    } 

    public System GetBy(GameObject v) { ... } 

    public void Add(List<System> s) { ... } 

    public void DestroyBy(Vector3 v) { ... } 

    ... 
} 

あなたがそれらを取得/削除/追加するためのシステムにアクセスする必要があるときに、次の操作を実行したい:

using Namespace/Of/SystemRepository 

// ... 

var systemRepo = new SystemRepository(); 

systemRepo.Add(totalSystems); 

そして、どこか別の場所を..

var systemRepo = new SystemRepository(); 

var allSystems = systemRepo.GetAll(); 
for (int i = 0; i < allSystems.Count(); i++) 
{ 
    allSystems[i].worldPos = new Vector3(Random.Range(min, max), Random.Range(min, max), Random.Range(minZ, maxZ)); 
    Instantiate(systemObject, allSystems[i].worldPos, Quaternion.identity); 
} 

注:SystemRepositoryの中で、静的になるシステムのリストを宣言しました。 nullの場合にのみインスタンス化します。つまり、ゲームの生涯で一度しかインスタンス化できないため、アクセスするリポジトリのインスタンスに関係なく常に同じデータを取得できます。このようなことは、通常、データベースを使用して行われます。

+0

ゲームオブジェクト、スプライトレンダラー、ベクター3への参照はどこに保存しますか? allSystems [i] .worldPosのスニペットを追加しましたが、クラスにどこに存在するのかわかりません。 – WDUK

+0

これらはシステムのリストの中に含まれています。 – FunkyPeanut

+0

なぜ配列上のリストを選択しましたか? – WDUK

関連する問題