在 Unity3d 中将游戏对象动态添加到场景中
Posted
技术标签:
【中文标题】在 Unity3d 中将游戏对象动态添加到场景中【英文标题】:Add gameobject dynamically to scene in Unity3d 【发布时间】:2013-03-19 12:55:10 【问题描述】:我正在创建一个场景,我想在其中显示优惠列表。为了显示报价,我创建了一个带有占位符的预制件,用于在运行时获得的报价详细信息。我在场景中创建了一个占位符以将预制件添加到场景中,但它没有显示在 UI 上。 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 w/o 位置或方向参数时,这些值取自您的预制件的默认值。 我可以给出什么坐标? 您可以在Start ()
的末尾添加Debug.Break ()
语句,然后查看类似Offer (Clone)
的内容是否出现在层次结构视图中。
您是否真的将预制件拖放到 Inspector 选项卡中的脚本变量上?
【参考方案1】:
//Drag object prefab to variable in inspector
public GameObject spawnObject;
//----------------------------------------
下面将使用对象Own变换设置创建游戏对象。
GameObject clone;
clone = Instantiate(spawnObject.transform,
spawnObject.transform.position,
spawnObject.transform.rotation) as GameObject;
下面将使用对象Parents变换设置创建GameObject。
GameObject clone;
clone = Instantiate(spawnObject.transform,
transform.position,
transform.rotation) as GameObject;
不确定这是否有帮助,但祝你的游戏好运:)
【讨论】:
【参考方案2】:在 Unity 中,您可以这样做。
GameObject.Instantiate(prefab,new Vector3(1,1,0),Quaternion.identity);
另请参阅:http://docs.unity3d.com/Documentation/ScriptReference/Object.Instantiate.html
尤其是Position,它必须在你的相机前面,否则你可能看不到它。
还有,我建议你看看NGUI。它是一个功能强大的 GUI 系统,带有一些有用的开发 API。顺便说一句,我无法想象没有这样的东西开发游戏有多难,所以你迟早会需要它;\
有了它,你可以轻松做到。
Gameobject go = NGUITools.AddChild(Gameobject Parent, Gameobject Prefab)
更新:
当我回答这个问题时,NGUI 是 ONLY 可用的 gui 系统,所以我推荐它。但是,有一个官方的 Unity UI 系统(AKA uGUI),你真的不必使用 NGUI,更不用说 gui 战争仍在继续。
更重要的是,您可能想要参加泳池系统。它用于处理大型游戏对象,如子弹、立方体等。如果您在同一场景中有数百个特定游戏对象并且遭受实例化,那么您可能需要一个池。我个人尝试过 FastPool,它运行良好,实际上所有同类资产的运行方式完全相同。
【讨论】:
以上是关于在 Unity3d 中将游戏对象动态添加到场景中的主要内容,如果未能解决你的问题,请参考以下文章
Sprite Kit - 使用 Switch Case 将随机 Sprite 节点添加到场景中
unity3d里面prefabassetbundleunitypackage等包的使用