2015-09-06 70 views
0

基本上是否有一種實際的節省時間的方法來創建一個函數,讓您創建一個由函數參數指定的GameObject?在Unity中創建遊戲對象的自動方法?

喜歡:

public void thing_maker(string gameobject_name, string sprite_name, string rg_body_name) 
+0

是的,你可以調用'新遊戲物體()'(這將創建一個空白的,空的遊戲物體)到你可能會添加組件(通過'AddComponent ()')或調用['UnityEngine.Object.Instantiate(gameObjectToCopy)'](http://docs.unity3d.com/ScriptReference/Object.Instantiate.html)創建一個副本。您也可以在運行時實例化預製件。一些詳細的信息在這裏:http://docs.unity3d.com/Manual/InstantiatingPrefabs.html –

+0

好,但你可以指定'GameObject()'的名字從一個參數'thing_maker()'?就像調用'thing_maker(go_player,sprt_player,rgdbdy_player)'將創建一個名爲go_player的遊戲對象,一個名爲sprt_player的精靈等。 – novasniff

+1

當然,只需檢查[文檔](http://docs.unity3d.com/ScriptReference/遊戲對象-ctor.html)。您必須自己添加組件或實例化預製件,但是阻礙您嘗試實施此方法的原因是什麼? – 31eee384

回答

1

這個例子應該做你所需要的。 它要求您有一個名爲的資源文件夾,並且要加載的精靈將位於該文件夾內。

另一種選擇是做GameObject go = Instantite(SomePrefabName) as GameObject insigned new GameObject(),如果你有一個預製好的,你只想改變一些組件的值。

祝你好運。

public GameObject thing_maker(string gameobject_name, string sprite_name, string rg_body_name) 
{ 
    GameObject go = new GameObject(gameobject_name); 
    SpriteRenderer sr = go.AddComponent<SpriteRenderer>(); 
    sr.sprite = Resources.Load<Sprite>(sprite_name); 
    Rigidbody rb = go.AddComponent<Rigidbody>(); 

    /* now if you want to change values of the components you can just do it 
     by accesing them directly. for instance: rb.isKinematic = true; will 
     change the isKinematic value of this rigidbody to true. */ 

    return go; 
} 
1

在我看來,你可以嘗試這樣的事:

public void ThingMaker(string gameobject_name, Sprite spriteToDraw) { 
    GameObject newObj; 
    newObj= new GameObject(gameobject_name); 
    newObj.AddComponent<Rigidbody2D>(); 
    newObj.AddComponent<SpriteRenderer>(); 
    newObj.GetComponent<SpriteRenderer>().sprite = spriteToDraw; 
}