在Unity3d中动态地向场景中添加游戏对象

22

我正在创建一个场景,想在其中展示一些优惠信息。为了显示这些信息,我创建了一个预制件,并在其中设置了用于获取运行时信息的占位符。我在场景中创建了一个位置来添加该预制件,但它没有出现在用户界面上。 OfferHolderClass:

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

    }
}

我刚开始学Unity,不确定我在这里缺少什么。


你确定已经在正确的位置实例化了预制体吗?尝试手动指定坐标。 - Botz3000
当你调用Instantiate而没有传入位置或方向参数时,这些值将从你的预制件默认值中获取,就像@Botz3000所说的那样。 - Jerdak
我可以提供哪些坐标? - Ashwani K
你可以在 Start() 结尾处添加一个 Debug.Break() 语句,然后查看层次视图中是否出现类似于 Offer(Clone) 的东西。 - Kay
@AshwaniK 在原点放置一个物体,可以使用Instantiate(localOffer,Vector3.zero,Quaternion.identity)。或者在Unity编辑器层次结构中查看(预览模式),如果您的对象已被实例化,则会出现在列表中,您可以双击它以查看它是否实际存在于场景中,只是相机没有面向正确的方向。 - Jerdak
1
你是否确实在检查器选项卡中将预制件拖放到脚本变量上了? - 0xC0DED00D
2个回答

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

以下将使用对象的 自身 Transform 设置创建 GameObject。

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

以下将使用父对象的变换设置创建GameObject。

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

不确定这是否有所帮助,但祝你的游戏好运:)


8
在Unity中,您可以像这样操作。
 GameObject.Instantiate(prefab,new Vector3(1,1,0),Quaternion.identity);

请参见:http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html 特别是对于“位置”这个属性,它必须位于摄像头前方,否则你可能看不到它。
此外,我建议你去了解一下NGUI。这是一个功能强大的GUI系统,具有一些有用的API供开发使用。顺便说一句,如果没有这样的东西,想象一下开发游戏有多难,所以你迟早会需要它;
有了它,你可以轻松地做到这一点。
Gameobject go = NGUITools.AddChild(Gameobject Parent, Gameobject Prefab)

更新:

当我回答这个问题时,NGUI是唯一可用的GUI系统,所以我推荐它。然而,现在有一个官方的Unity UI系统(也叫uGUI),你不必使用NGUI,更不用说GUI战争仍在继续。

此外,您可能想了解一下池系统。它被用来处理大量游戏对象,比如子弹、立方体等。如果您在同一场景中有数百个特定的游戏对象并且遇到实例化的问题,那么你可能需要一个池。个人尝试了FastPool,它表现良好,实际上同类的所有资产都完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接