2016-03-01 37 views
1

這裏是我的類:如何實例化從類對象在Unity的C#與一個變量(字符串)給一個名字

public class Mark { 

    public GameObject InstanciatedObject; 
    public Vector3 ControllerPosition; 
    public Quaternion ControllerRotation; 

    public void CreateMark(Mark m, GameObject o, Vector3 p, Quaternion r) 
    { 
     m.InstanciatedObject= o; 
     m.ControllerPosition= p; 
     m.ControllerRotation = r; 
    } 
} 

而且我想用下面的行另一個腳本:

Mark m = new Mark(); 
m.CreateMark(m, ControllerObject, GetControllerPosition(), GetControllerRotation()); 

這裏的問題是我不想手動創建對象的名稱。我想創建,例如,m1m2m3

+0

無論你喜歡什麼類,都可以調用類的實例,但類名稱本身應該是固定的。除非你想看看動態對象創建:https://msdn.microsoft.com/library/ee461504%28v=vs.100%29.aspx – ManoDestra

回答

0

如果你這樣做,所以你可以有一些諸如同一類型的多個唯一對象,比如你可以通過以下得到更好的服務在屏幕上多個敵人的名單:

public class Mark { 

public GameObject InstantiatedGameObject; 
public Vector3 ControllerPosition; 
public Quaternion ControllerRotation; 

public Mark(GameObject o, Vector3 p, Quaternion r) 
{ 
    InstantiatedGameObject = o; 
    ControllerPosition = p; 
    ControllerRotation = r; 
} 

然後,你可以使用下面的代碼:

using System.Collections.Generic; 

public class Main { 

    public List<Mark> MarkList = new List<Mark>() 

    public void Main() { 
     // do stuff to get the needed variables 
     MarkList.Add(new Mark(ControllerObject, GetControllerPosition(), GetControllerRotation())); 
    } 
} 

這將不斷增加的aMark類對象的新的,獨特的實例爲方便名單。使用此方法而不是使用數組的好處是您無需事先確定最大大小,您可以根據需要動態添加和刪除對象。

+0

我試過,當我聲明列表它說: 無法找到類型或命名空間名稱列表。你是否缺少using指令或程序集引用? –

+0

對不起,我忘記了使用聲明。我已更新我的示例 – Taegost

+0

謝謝。我會堅持這個解決方案,因爲我想實例化一個未定義數量的對象並獲取它的屬性。就我而言,List比數組更適合。 –

1

你不能在運行時創建的變量名,如果可能的話,將不適合你的水平基本情況。

最好是考慮一個數組:

MarksArray [] m = new MarksArray[size]; 

for(int i = 0; i < size ; i ++){ 
    m[i] = new Mark(); 
    m[i].CreateMark(param1, param2,...); 
} 

那麼你可以使用像這樣的變量:

m[0].member = value; 

作爲一個側面說明,你應該開始用C#編碼約定相符時,班和方法在前面使用Cap字母。

+0

我認爲這樣做。感謝您的快速回復。 是的,從現在開始我會記住編碼約定。我實際上創建了自己的約定,以便我的代碼不會太雜亂,但我明白,更好地遵循一般準則,因此其他程序員也很容易理解。 –

+0

如果您事先知道大小,陣列就很好,因爲在那裏您可能會遇到一些需要動態列表的情況 – Taegost

+0

編碼約定非常重要,因爲Unity提供了一定的約定。這顯然會將你的代碼與Unity代碼分開,但我不會推薦它。而且有一天你可能會和別人一起工作,他們不會喜歡它,然後他們不會喜歡你。至於數組/列表衝突,如果需要,仍然可以從一個跳轉到另一個。不是最好的,但仍然有可能。 – Everts

相關問題