2016-04-16 52 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和sprite渲染器,以便我可以再次重新實例化。

我讓自己非常困惑,所以希望得到一些關於我如何有效設置它的幫助。

+0

有點混淆,您可能需要更改您需要的問題以及問題出在哪裏。 –

+0

總之,我想創建一堆遊戲對象,實例化它們並設置它們的位置,並且還有對精靈渲染器的引用,所以當我從遊戲世界中摧毀時,我不會丟失這些信息,因爲我可能想要重新實例化一些未來的一點。 – WDUK

+0

只是有點正式的說明:不要命名一個類'系統'。這是頂級的.net命名空間。像「GameSystem」這樣的東西會更好,並且不那麼容易混淆。 –

回答

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內部,我聲明系統列表是靜態的只有在它爲空的情況下才會實例化它。這意味着它只能在遊戲的生命週期中實例化一次,因此無論您訪問的是什麼樣的回購實例,都可以獲得相同的數據。這樣的事情通常會使用數據庫來完成。

+0

那麼我會在哪裏存儲我的遊戲對象,精靈渲染器和矢量3的引用?您添加了allSystems [i] .worldPos的片段,但我沒有看到它在課堂中存在的位置? – WDUK

+0

它們包含在系統列表中。 – FunkyPeanut

+0

你爲什麼選擇一個數組的列表? – WDUK

相關問題