2013-03-19 14 views
17

Ich erstelle eine Szene, in der ich die Liste der Angebote anzeigen möchte. Um das Angebot anzuzeigen, habe ich ein Prefab mit Platzhaltern für die Angebotsdetails erstellt, die ich zur Laufzeit erhalten werde. Ich habe einen Platzhalter in der Szene erstellt, um das Prefab zur Szene hinzuzufügen, aber es wird nicht auf der Benutzeroberfläche angezeigt. OfferHolderClass:GameObject dynamisch zu Szene in Unity3d hinzufügen

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() { 

    } 
} 

Ich bin neu in der Einheit und bin nicht sicher, was ich hier fehlt.

+0

Haben Sie sorgen dafür, dass Sie das Fertig an der richtigen Stelle instanziiert? Versuchen Sie, die Koordinaten manuell anzugeben. – Botz3000

+0

Was @ Botz3000 sagte. Wenn Sie Instantiate ohne Positions- oder Orientierungsargumente aufrufen, werden diese Werte aus den Standardeinstellungen Ihres Prefab übernommen. – Jerdak

+0

Welche Koordinaten kann ich geben? –

Antwort

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

wird im Folgenden erstellen Gameobject die Objekte eigenen Transformations-Einstellungen.

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

Im Folgenden werden die Objekte erstellen Gameobject Eltern mit Einstellungen Transformation.

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

Nicht sicher, ob das hilft, aber viel Glück auf Ihrem Spiel :)

7

In Unity können Sie es so machen.

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

Siehe auch: http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html

Speziell für Position, es vor der Kamera muss, oder Sie können es nicht sehen.

Was ist mehr, ich schlage vor, Sie werfen einen Blick auf NGUI. Es ist ein leistungsfähiges GUI-System mit einigen nützlichen API für die Entwicklung. BTW Ich kann mir nicht vorstellen, wie schwer es ist, Spiele ohne solche Dinge zu entwickeln, so dass Sie es früher oder später brauchen können;

Damit können Sie es einfach tun.

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

UPDATE:

Als ich dies beantwortet, Ngui ist das NUR verwendbar gui System, so dass ich es empfohlen. Allerdings gibt es ein offizielles Unity-UI-System (AKA uGUI) da draußen, du musst NGUI nicht wirklich benutzen, lass den Gui-Krieg noch weitergehen.

Darüber hinaus möchten Sie vielleicht in Pool-System genommen werden. Es wird verwendet, um massive Spielobjekte wie Kugeln, Würfel usw. zu handhaben. Wenn Sie Hunderte von spezifischen Spielobjekten in der gleichen Szene haben und unter Instanziierung leiden, dann benötigen Sie wahrscheinlich einen Pool. Persönlich habe ich FastPool ausprobiert und es funktioniert gut, eigentlich funktionieren alle Assets seiner Art genau gleich.