2015-09-06 43 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; 
}