当前位置:   article > 正文

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

object.instantiate

【Unity入门】动态创建实例

    大家好,我是Lampard~~

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

 

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

(1)Instantiate克隆创建对象

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

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

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

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

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

  1. void Update()
  2. {
  3. if (Input.GetMouseButtonDown(0))
  4. {
  5. GameObject newEarth = Instantiate(earthPrehab, null);
  6. }
  7. }

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

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

  1. void Start()
  2. {
  3. earthPrefabNode = GameObject.Find("EarthPrefabNode");
  4. }
  5. void Update()
  6. {
  7. if (Input.GetMouseButtonDown(0))
  8. {
  9. GameObject newEarth = Instantiate(earthPrehab, earthPrefabNode);
  10. }
  11. }

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

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

  1. void Update()
  2. {
  3. if (Input.GetMouseButtonDown(0))
  4. {
  5. GameObject newEarth = Instantiate(earthPrehab, earthPrefabNode.transform);
  6. }
  7. }

(2)Destory删除对象

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

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

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

  1. if (Input.GetMouseButtonDown(1))
  2. {
  3. int childCnt = earthPrefabNode.transform.childCount;
  4. Transform tr = earthPrefabNode.transform;
  5. if (childCnt > 0)
  6. {
  7. Debug.Log("删除游戏对象");
  8. Destroy(tr.GetChild((childCnt - 1)).gameObject);
  9. }
  10. }

    看看效果:

 

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/116406
推荐阅读
相关标签
  

闽ICP备14008679号