首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

unity中的预制体文件介绍

  • 25-02-20 16:01
  • 3935
  • 5497
blog.csdn.net

unity中的.prefab文件

在Unity中,.prefab文件是一种特殊的资源类型,它记录了预制件(Prefab)的定义和配置。预制件是Unity中的一种机制,允许开发者创建可重复使用的游戏对象模板。.prefab文件并不直接记录具体的资源内容,而是记录了文件关联的资源路径和对象之间的关系。以下是.prefab文件的主要内容和作用:

1. 对象结构

  • 对象树:.prefab文件记录了预制件中所有游戏对象的层次结构和父子关系。
  • 组件信息:每个游戏对象上的组件(如Transform、MeshFilter、Renderer等)及其属性都会被记录在.prefab文件中。

2. 资源引用

  • 资源路径:.prefab文件中包含了对外部资源的引用,例如纹理、材质、音频文件等。这些引用通常是以资源的GUID或相对路径的形式存储的。
  • 动态加载:当预制件被实例化时,Unity会根据这些引用来动态加载所需的资源。

3. 默认值和属性

  • 默认属性值:.prefab文件记录了预制件中各个组件的默认属性值。
  • 可编辑区域:预制件中的某些属性可以被标记为可编辑的,这样在使用预制件时可以修改这些属性而不影响原始的.prefab文件。

4. 版本控制信息

  • GUID:每个.prefab文件都有一个全局唯一标识符(GUID),Unity使用这个GUID来管理和引用预制件。
  • 依赖关系:.prefab文件可能包含对该.prefab文件所依赖的其他资源的引用信息。

5. 自定义编辑器数据

  • 自定义数据:开发者可以在.prefab文件中存储自定义的编辑器数据,这些数据仅在Unity编辑器中使用,不会影响运行时的行为。

示例

假设你有一个包含MeshFilter和Renderer组件的立方体预制件:

  • .prefab文件会记录这个立方体的对象结构和组件信息。
  • 如果立方体使用了特定的纹理,.prefab文件会记录这个纹理的引用路径。
  • 当你在场景中实例化这个预制件时,Unity会根据.prefab文件中的引用路径动态加载纹理。

结语

.prefab文件在Unity中起到了模板的作用,它记录了预制件的结构和对外部资源的引用,而不是直接记录具体的资源内容。这种设计使得预制件可以在不同的场景中重复使用,并且能够灵活地适应不同的资源变化。开发者可以通过Unity编辑器直观地编辑.prefab文件,从而实现对游戏对象模板的精细控制。

首先资源是什么

要弄明白什么是“资源”,它与我们Prefab、GameObject、Component有什么区别?

Prefab是一个记录了资源组织关系的文本文件。你可以直接用记事本打开prefab文件,

在这里插入图片描述
在这里插入图片描述
图中的prefab,左图表示这个GameObject名为AIPawnActor,其上挂了4个组件。其中一个组件为Transform(YAML ClassID = 4);右图表示这个GameObject上的MeshRenderer组件(YAML ClassID = 23),引用了一个GUID为a68b0439d20bbff46a0d63da01cb3362的材质。prefab中并不保存实际的资源,而是根据FileID、GUID,建立了prefab内外的索引关系

当通过Resources.Load、AssetBundle.LoadAsset读取prefab文件时,引擎会根据组织关系展开prefab,加载关联资源。

GameObject、Component是Unity通过“在C++定义、给C#暴露接口”的形式,封装了某些功能的接口。他们索引了资源,但他们本身不是资源。例如Transform记录了Position、Rotation、Scale信息;MeshRenderer负责从MeshFilter、Material中获得需要的模型、材质数据,告诉Unity该如何渲染。但是,它们并不是“资源”,而是间接引用了资源。

Texture、Mesh、Shader、Material、AnimatorController、AnimationClip等,它们保存了实际的数据,也可以从文件系统中读取、保存到文件。这些是真正意义上的“资源”(Assets)。

其次,要弄明白Unity的序列化中的几个概念:“GUID”、“Local ID”、“ Instance ID”。

File GUID:资源第一次被导入Assets目录内(以下称“工程内”),Unity自动为其分配的一个文件唯一ID,记录在.meta文件中。File GUID设计的初衷,是让引擎的资源管理,可以忽略文件路径的变化。当贴图挪动位置时,引用它的材质球不需要同步地修改。

Local ID:同一个文件内,多个UnityEngine.Object(以下称“Object”)的文件内唯一ID。如一个Prefab,可能存在多个子GameObject节点、多个Component。这些Object在Prefab中通过Local ID进行索引。

Instance ID:运行时为每个Object生成的Int32索引,本次运行期间唯一。对于Resources下的资源、直接打进包内的场景,Instance ID将在游戏启动时创建;对于AssetBundle内的资源,Instance ID将在加载Object时创建。运行时的比较、加载、操作,都将以Instance ID为Key。只有需要加载时,才使用File GUID + Local ID去查找、加载资源。

注:本文转载自blog.csdn.net的你一身傲骨怎能输的文章"https://blog.csdn.net/qq_33060405/article/details/143221531"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

134
游戏
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top