2013-03-19 145 views
17

我创造,我要表现出报价列表的场景。为了展示优惠,我创建了一个带有占位符的预制件,供我在运行时获得的优惠详情。我在场景中创建了一个占位符,将预制件添加到场景中,但未在用户界面上显示。 OfferHolderClass:动态场景添加游戏对象在Unity3d

using UnityEngine; 
using System.Collections; 

public class OfferHolder : MonoBehaviour { 

    public GameObject localOffer; 
    // Use this for initialization 
    void Start() { 
     GameObject offer = Instantiate(localOffer) as GameObject; 
     offer.GetComponent<Offer>().Text = "Testing"; 
     offer.transform.parent = this.transform; 
    } 

    // Update is called once per frame 
    void Update() { 

    } 
} 

我新的团结,我不知道我是缺少在这里。

+0

你是否确信你实例在正确的位置的预制?尝试手动指定坐标。 – Botz3000 2013-03-19 13:00:07

+0

What @ Botz3000说。当您调用实例化W/O位置或方向参数时,这些值将从您的预制件的默认值中获取。 – Jerdak 2013-03-19 14:25:28

+0

我可以给予什么坐标? – 2013-03-19 16:34:20

回答

11
//Drag object prefab to variable in inspector 
public GameObject spawnObject; 
//---------------------------------------- 

下面将使用对象自己变换设置创建游戏物体。

GameObject clone; 
    clone = Instantiate(spawnObject.transform, 
         spawnObject.transform.position, 
         spawnObject.transform.rotation) as GameObject; 

下面将使用对象家长变换设置创建游戏物体。

GameObject clone; 
    clone = Instantiate(spawnObject.transform, 
         transform.position, 
         transform.rotation) as GameObject; 

不知道这是否会有所帮助,但好​​运气在你的游戏:)

7

在Unity,你可以像下面这样做。

GameObject.Instantiate(prefab,new Vector3(1,1,0),Quaternion.identity); 

参见:http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html

特别是对于位置,则必须在镜头面前,或者你可能看不到它。

更重要的是,我建议你去看一下NGUI。这是一个功能强大的GUI系统,具有一些有用的开发API。 BTW我无法想象有多难开发游戏没有这样的东西,所以你可能需要它迟早; \

有了它,你可以那么容易做到。

Gameobject go = NGUITools.AddChild(Gameobject Parent, Gameobject Prefab) 

UPDATE:

当我回答这个,NGUI是ONLY可用的GUI系统,所以我推荐它。然而,在那里有一个官方的Unity UI系统(AKA uGUI),你不必使用NGUI,离开gui战争仍在继续。

更重要的是,你可能要采取考虑到了池系统。它用于处理像子弹,立方体等大型游戏对象。如果在同一场景中有数百个特定的gameobject并且正在遭受实例化,那么您可能需要一个池。就我个人而言,我尝试过FastPool,它运行良好,实际上所有类型的资产都是一样的。