欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Unity 中实例化预制体的完整过程

Unity 中实例化预制体的完整过程

2025/3/26 2:51:21 来源:https://blog.csdn.net/m0_67428211/article/details/146390199  浏览:    关键词:Unity 中实例化预制体的完整过程

在这里插入图片描述

1.资源加载(Load Asset to Memory)

  • Unity 的资源加载是指将各种资源(如模型、纹理、音频、预制体 等)从存储介质(如磁盘、AssetBundle、远程服务器)到运行时内存的过程,使其成为可用的资源(Asset),加载后的预制体是内存中的只读资源(Asset),无法直接修改

1.1直接引用

  • 在Inspector面板中直接将资源拖拽到脚本的公共变量上

    特点:
    简单易用:适合小型项目或固定资源
    静态加载:资源会被直接打包到场景或预制体中,无法动态加载
    内存占用:资源会随场景加载自动加载,可能导致内存浪费

1.2Resources文件夹

  • 将资源放在 Assets/Resources 文件夹中,通过 Resources.Load() 加载

    特点:
    动态加载:支持按需加载资源
    局限性:所有资源会打包到最终构建中,增大包体、不支持热更新

1.3AssetBundle

  • 将资源打包成独立的 .assetbundle 文件,支持动态下载和加载

    特点:
    灵活:支持热更新、按需加载、减小初始包体。
    复杂:需手动管理依赖、版本和内存卸载。
    内存管理:需调用 AssetBundle.Unload(true) 释放资源。

1.4Addressables

  • Unity官方推荐的资源管理系统,基于AssetBundle但更高级

    特点:
    自动化:自动处理依赖、打包和加载
    动态加载:支持本地和远程资源(如CDN)
    内存优化:提供缓存和引用计数管理

1.5Scene 加载

  • 通过 SceneManager.LoadScene 加载场景,场景内的资源会一并加载

    场景切换:使用 SceneManager 加载场景资源。

2.实例化(Instantiate GameObject)

  • 基于内存中的预制体资源(Asset),生成一个独立的、可操作的 GameObject 实例

2.1Prefab 和 Gameobject

📚️ Prefab : Prefab 是一个模板,用于保存一个或多个的Gameobject的完整结构和配置(包括组件、子物体、脚本参数),不直接存在于场景中,需要通过实例化具体生成对象, 在编辑器中直接拖拽Prefab到场景中(自动生成实例)

📚️ Gameobject: Gameobject是通过Prefab生成的具体对象,存在于场景中,仅存在于场景或运行时内存中,不会作为独立文件保存,若需保存到场景中,需手动拖拽到场景并保存场景文件

📚️ 实例化预制体:实例化预制体Instantiate方法其实就是一种序列化过程,Instantiate方法的内部首先将参数original所引用的游戏对象序列化,得到序列化流(序列化内容包括GameObject 的所有组件Component、属性值、子对象层级结构等),通过反序列化机制将序列化流生成新的Gameobject对象,确保了克隆对象与原始对象完全独立(深拷贝),为克隆对象生成新的实例 ID并且自动在对象名称后添加 “Clone” 标记

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词