2017-06-16 5 views
0

以下のスクリプトは空のゲームオブジェクトWeaponGroupに追加されます。このオブジェクトはエディタを使用して入力できます。私は新しいゲームオブジェクトWeaponGroupsを作成しました。これにはスクリプトSetupWeaponGroupsScriptが必要です。それぞれWeaponGroupSetupWeaponGroupsScriptWeaponGroupオブジェクトの配列を持ちます)が以下のような方法で設定されるように、以下のプロパティを転送することができます。プロパティをインスペクタに非表示にしてSetupWeaponGroupsScriptに入力しますか?与えられた階層のインスペクタを介してプレハブの配列にアクセスする方法

public class SetupWeaponsScript { 

// Here's our tuple combining a weapon prefab and a direction. 
[System.Serializable] 
public struct DirectedWeapon { 
    public WeaponScript weapon; 
    public WeaponScript.Direction direction; 
} 

// The prefabs array is now this tuple type. 
public DirectedWeapon[] weaponPrefabs; 
public WeaponScript[] weapons; 

void Start() 
{ 
    weapons = new WeaponScript[weaponPrefabs.Length]; 

    for (int i = 0; i < weaponPrefabs.Length; i++) 
    { 
     // Using typed Instantiate to save a GetComponent call. 
     weapons[i] = Instantiate<WeaponScript>(weaponPrefabs[i].weapon); 
     weapons[i].weaponDir = weaponPrefabs[i].direction; 
    }  
} 
} 

グラフィカルに、私は新しいスクリプトSetupWeaponGroupsScript用のエディタで、次の階層を持っているしたいと思います:

enter image description here

答えて

0

これは近いはず:

public class SetupWeaponsScript 
    { 
     [System.Serializable] 
     public struct DirectedWeaponGroup 
     { 
      public DirectedWeaponScript[] weaponPrefabs; 
     } 

     // Here's our tuple combining a weapon prefab and a direction. 
     [System.Serializable] 
     public struct DirectedWeapon 
     { 
      public WeaponScript weapon; 
      public WeaponScript.Direction direction; 
     } 

     // The prefabs array is now this tuple type. 

     public DirectedWeaponGroup[] weaponGroups; 

     public DirectedWeapon[] weaponPrefabs; 
     public WeaponScript[] weapons; 

     void Start() 
     { 
      weaponGroups = new DirectedWeaponScript[weaponGroups.Length]; 

      for (int h = 0; h < weaponGroups.Length; h++) 
      { 
       weaponPrefabs = weaponGroups[h].weaponPrefabs; 
       weaponPrefabs[h] = Instantiate<DirectedWeaponScript>(weaponGroups[h].weaponPrefabs); 

       weapons = new WeaponScript[weaponPrefabs.Length]; 

       for (int i = 0; i < weaponPrefabs.Length; i++) 
       { 
        // Using typed Instantiate to save a GetComponent call. 
        weapons[i] = Instantiate<WeaponScript>(weaponPrefabs[i].weapon); 
        weapons[i].weaponDir = weaponPrefabs[i].direction; 
       } 
      } 
     } 
関連する問題