在 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 中将游戏对象动态添加到场景中的主要内容,如果未能解决你的问题,请参考以下文章

游戏开发之UE4添加角色到场景中

将对象移动到场景中的指定点?

Sprite Kit - 使用 Switch Case 将随机 Sprite 节点添加到场景中

unity3d里面prefabassetbundleunitypackage等包的使用

Unity 预制件的行为不同,具体取决于是将它们静态拖动到场景中还是让它们由代码动态生成

如何将图像后处理着色器的结果添加到场景中