【Unity入门】22.动态创建实例

【Unity入门】动态创建实例

    大家好,我是Lampard~~

    欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 

 

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

(1)Instantiate克隆创建对象

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

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

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

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

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

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

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

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

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

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

     奇怪的事情发生了,此时代码居然报错了,原因在于传入的父类需要transform类型

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

    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);
        }
}

    看看效果:

 

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值