【Unity入门】动态创建实例

    大家好,我是Lampard~~

    欢迎来到Unity入门系列博

unity Instantiate创建预制件和克隆实例性能消耗 unity如何创建预制体_unity

 

(一)脚本实例化预制体对象

(1)Instantiate克隆创建对象

    昨天我们学习了预制体这个概念,在编辑器中使用预制体创建游戏对象,并学习如何修改预制体等。今天主要来学习,如何在脚本中利用预制体创建游戏对象

unity Instantiate创建预制件和克隆实例性能消耗 unity如何创建预制体_预制体_02

    毕竟如果要创建成百上千个对象的时候,在编辑器中一个个摆是不现实的,而我们使用到的方法就是Object的Instantiate方法

Object.Instantiate 是 Unity 中一个用于在场景中创建新对象的函数。它可以用于实例化预制体、复制已有游戏对象等等

    那要如何做呢?首先把我们需要作为克隆模板的预制体定义为全局参数,并在编译器中赋值然后就可以在脚本中访问到预制体了(为了方便我就写在mainLogic了

unity Instantiate创建预制件和克隆实例性能消耗 unity如何创建预制体_实例化_03

    紧接着在脚本中我们调用Instantiate即可创建多个预制体,Instantiate重载了很多种方法,我们使用比较简单的,传入两个参数,参数1为预制体模板,参数2为挂载的父节点(传null就会挂在根节点上),代码如下:

void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject newEarth = Instantiate(earthPrehab, null);
        }
    }

    通过以下代码我们就可以每点击一次,就生成一个物体对象了

unity Instantiate创建预制件和克隆实例性能消耗 unity如何创建预制体_实例化_04

    全部都生成在根节点下有点丑,我们可以创建一个结点管理这些生成的对象,然后在代码中把的父节点传入这个就可以了

unity Instantiate创建预制件和克隆实例性能消耗 unity如何创建预制体_父节点_05

void Start()
    {
        earthPrefabNode = GameObject.Find("EarthPrefabNode");
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject newEarth = Instantiate(earthPrehab, earthPrefabNode);
        }
    }

原因在于传入的父类需要transform类型

unity Instantiate创建预制件和克隆实例性能消耗 unity如何创建预制体_预制体_06

     好吧大家也要注意下,这样改过来就可以了

void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject newEarth = Instantiate(earthPrehab, earthPrefabNode.transform);
        }
    }

(2)Destory删除对象

    有创建那就有删除,我们可以通过Destory方法删除对象。这里的删除是游戏执行到下一帧才进行的,就有点像cocos里面的clone和release方法


Object.Destroy 是 Unity 中用于销毁游戏对象和组件的函数,它可以在游戏运行时销毁对象,也可以在场景加载后销毁对象。使用它可以帮助开发者优化游戏性能,释放不再需要的资源

    好吧,那我们直接来试试,如鼠标右键就删除克隆出来的对象,如果childCnt 不大于0(删完了)就不执行了

if (Input.GetMouseButtonDown(1))
{
    int childCnt = earthPrefabNode.transform.childCount;
    Transform tr = earthPrefabNode.transform;
    if (childCnt > 0)
        {
            Debug.Log("删除游戏对象");
            Destroy(tr.GetChild((childCnt - 1)).gameObject);
        }
}

    看看效果:

unity Instantiate创建预制件和克隆实例性能消耗 unity如何创建预制体_游戏引擎_07

 

好啦今天就到这里,谢谢各位感谢阅读!!!
点赞,关注!!!

unity Instantiate创建预制件和克隆实例性能消耗 unity如何创建预制体_unity_08