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

这篇具有很好参考价值的文章主要介绍了【Unity入门】22.动态创建实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Unity入门】动态创建实例

    大家好,我是Lampard~~

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

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

 

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

(1)Instantiate克隆创建对象

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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入门】22.动态创建实例

 

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

【Unity入门】22.动态创建实例文章来源地址https://www.toymoban.com/news/detail-454647.html

到了这里,关于【Unity入门】22.动态创建实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity2022里用ViusalStudio2019创建代码报错CS8032 C# 无法从 {1}: {2} 创建分析器实例 {0}。

    用Unity2022在vs2019里创建脚本时遇到了CS8032 问题 首先在Assets文件下创建一个名为CS8032WarningFixer的脚本   在脚本里输入这些代码  using System.Linq; using System.Xml.Linq; using UnityEditor; public class CS8032WarningFixer : AssetPostprocessor {     private static string OnGeneratedCSProject(string path, string content

    2024年02月16日
    浏览(54)
  • Unity 动态创建Mesh 基础方法与高级方法

    最近在做项目优化,注意到动态创建Mesh时,Unity提供了一套高级方法用于快速创建模型,特此记录学习一下。 关于Mesh的基本概念再次不在阐述,可以参考Unity Mesh 官方文档,介绍的很详细,其中 基础方法 包括:SetVertices、SetNormals、SetUVs、SetTriangles、SetIndices、SetColors、SetTa

    2024年03月27日
    浏览(34)
  • 留个档,Unity Navigation. 动态创建NavMesh,动态Bake NavMesh, 动态烘培NavMesh

    运行时,动态创建NavMesh,动态Bake NavMesh, 动态烘培NavMesh 根据unity官方的demo,解析一下,发现动态创建NavMesh导航并不难. 其实只需要 网格信息,还有 需要创建的范围即可。 可以认为是固定公式了 简化写法如下,是不是需要缓存某些信息,就看具体逻辑实现了 程序学无止尽。

    2024年02月13日
    浏览(21)
  • Unity快速入门教程-详解预制体(Prefab)及其实例化Instantiate

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 博主刚学习unity的时候,在网上找预制体相关的博客,可是很难找到一篇凝练且通俗易懂介绍预制体的文章,浪费了不少时间且难以理解一些文章的内容。自己摸索学习了一段时间过后,总算对预制体有

    2024年02月02日
    浏览(26)
  • Unity 性能优化的手段(对象池、静/动态批处理、GPU实例化、垃圾回收、LOD、LightMap)【更新中】

    目录 对象池 扩容策略 收缩策略 DrawCall DrawCall的过程 为什么减少DrawCall可以实现性能优化? 减少Draw Call的方法 静态批处理(Static Batching) 动态批处理(Dynamic Batching) GPU Instancing(GPU实例化)​​​​​​​ 贴图集 垃圾回收的优化 垃圾回收的性能影响 延迟垃圾回收 避免

    2024年02月04日
    浏览(26)
  • .NET Emit 入门教程:第六部分:IL 指令:5:详解 ILGenerator 指令方法:创建实例指令

    上上篇介绍了 IL 指令的分类以及参数加载指令,该加载指令以 Ld 开头,将参数加载到栈中,以便于后续执行操作命令。 上一篇介绍参数存储指令,其指令以 St 开头,将栈中的数据,存储到指定的变量中,以方便后续使用。 本篇将介绍创建实例指令,其指令以 New 开头,用

    2024年04月08日
    浏览(82)
  • Unity快速入门教程-创建并启用c#脚本

    提示:本篇文章主要提供新手入门学习,初次发文,多多指教 unity通过c#脚本构建项目逻辑关系,本篇介绍c#脚本创建,启用及其简单示例 提示:以下是本篇文章正文内容,下面案例可供参考 在Project窗口依次单击右键–Create–C#Script,创建脚本,假设命名为【Test】。

    2024年02月11日
    浏览(28)
  • 【Unity入门】1.创建第一个u3d项目

            大家好,我是Lampard~~      欢迎来到Unity入门系列博客     Halo大家好久不见,最近半年比较懒惰,一直都比较少更新(不过摆烂确实挺开心哈哈哈哈哈)。最近项目要转3D,引擎要从以前的cocos转向unity,关注我的小伙伴可能知道,我以前开发的一直是cocos2d的内容,

    2024年03月15日
    浏览(34)
  • Unity和C#游戏编程入门:创建迷宫小球游戏示例

    💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】 🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】 💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 当涉及到Unity和C#游戏编程入门时,以下是一些示例代码,可以帮助初学者更好地理

    2024年02月08日
    浏览(28)
  • 从零开始的Django框架入门到实战教程(内含实战实例) - 01 创建项目与app、加入静态文件、模板语法介绍(学习笔记)

      Django是目前比较火爆的框架,之前有在知乎刷到,很多毕业生进入大厂实习后因为不会git和Django框架3天就被踢掉了,因为他们很难把自己的工作融入到整个组的工作中。因此,我尝试自学Django并整理出如下笔记。   在这部分,我将从Django的安装讲起,从创建项目到制

    2024年02月09日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包