Assets, Objects and serialization Assets, Objects与序列化 最佳实践系列3

Unity中Newtonsoft.Json的IL2CPP兼容方案与JSON序列化实战 JSON作为轻量级数据交换格式,在软件开发和游戏工程中广泛用于网络通信、配置存储和数据持久化。其核心原理是基于文本的键值对结构,易于人类阅读和机器解析。在Unity开发中,处理复杂数据结构、多态类型和泛型集合时,内置的JsonUtility常显不足,而功能强大的Newtonsoft.Json(Json.NET)成为.NET生态的事实标准。然而,在Unity的IL2CPP编译环境下,尤其是面向WebGL、iOS等平台时,AOT(预先编译)限制会导致反射和动态代码生成相关功能运行时失败。为此,Unity官方提供 阅读详情

Assets, Objects and serialization Assets, Objects与序列化

本文档主要是对Unity官方手册的个人理解与总结(其实以翻译记录为主:>)
仅作为个人学习使用,不得作为商业用途,欢迎转载,并请注明出处。
文章中涉及到的操作都是基于Unity2018.3版本
参考链接:https://unity3d.com/cn/learn/tutorials/topics/best-practices/assets-objects-and-serialization?playlist=30089

This chapter covers the deep internals of Unity’s serialization system and how Unity maintains robust references between different Objects, both in the Unity Editor and at runtime. It also discusses the technical distinctions between Objects and Assets. The topics covered here are fundamental to understanding how to efficiently load and unload Assets in Unity. Proper Asset management is crucial to keeping loading times short and memory usage low.

本章将介绍Unity序列化系统的深层内部原理,以及Unity如何在Unity编辑器和运行时维护不同对象之间的健壮引用。还讨论了对象和资产之间的技术区别。这里涉及的主题对于理解如何有效地加载和卸载Unity中的资产是基础的。适当的资产管理对于保持加载时间短和内存使用率低是至关重要的。

1.1. Inside Assets and Objects 资产与对象的内在

To understand how to properly manage data in Unity, it is important to understand how Unity identifies and serializes data. The first key point is the distinction between Assets and UnityEngine.Objects.
要理解如何正确地管理Unity中的数据,理解Unity如何标识和序列化数据是很重要的。第一个关键点是资产和UnityEngine.Objects之间的区别。

An Asset is a file on disk, stored in the Assets folder of a Unity project. Textures, 3D models, or audio clips are common types of Assets. Some Assets contain data in formats native to Unity, such as materials. Other Assets need to be processed into native formats, such as FBX files.
资产是磁盘上的一个文件,存储在Unity项目的Assets文件夹中。纹理、3D模型或音频剪辑是常见的资产类型。有些资产以Unity原生的格式包含数据,比如materials。需要将其他资产处理为原生格式,比如FBX文件。

A UnityEngine.Object, or Object with a capitalized ‘O’, is a set of serialized data collectively describing a specific instance of a resource. This can be any type of resource which the Unity Engine uses, such as a mesh, sprite, AudioClip or AnimationClip. All Objects are subclasses of the UnityEngine.Object base class.
UnityEngine.Object或大写“O”的对象是一组序列化数据,它们共同描述资源的一个特定实例。这可以是Unity引擎使用的任何类型的资源,例如网格、精灵、AudioClip或AnimationClip。所有对象都是 UnityEngine.Object基类的子类。

While most Object types are built-in, there are two special types.虽然大多数对象类型都是内置的,但是有两种特殊类型。

  1. A ScriptableObject provides a convenient system for developers to define their own data types. These types can be natively serialized and deserialized by Unity, and manipulated in the Unity Editor’s Inspector window.
    ScriptableObject为开发人员定义自己的数据类型提供了一个方便的系统。这些类型可以由Unity本地序列化和反序列化,并在Unity编辑器的检查器窗口中进行操作。
  2. A MonoBehaviour provides a wrapper that links to a MonoScript. A MonoScript is an internal data type that Unity uses to hold a reference to a specific scripting class within a specific assembly and namespace. The MonoScript does not contain any actual executable code.
    MonoBehaviour提供了一个链接到MonoScript的接口。MonoScript是一种内部数据类型,Unity使用它在特定的程序集和命名空间中保存对特定脚本类的引用。MonoScript不包含任何实际的可执行代码。

There is a one-to-many relationship between Assets and Objects; that is, any given Asset file contains one or more Objects.
资产与对象之间存在一对多的关系;也就是说,任何给定的资产文件都包含一个或多个对象。

1.2. Inter-Object references 对象间引用

All UnityEngine.Objects can have references to other UnityEngine.Objects. These other Objects may reside within the same Asset file, or may be imported from other Asset files. For example, a material Object usually has one or more references to texture Objects. These texture Objects are generally imported from one or more texture Asset files (such as PNGs or JPGs).
所有UnityEngine.Objects可以引用其他UnityEngine.Objects。这些其他对象可以驻留在相同的资产文件中,也可以从其他资产文件导入。例如,一个材质对象通常有一个或多个纹理对象的引用。这些纹理对象通常从一个或多个纹理资产文件(如png或JPGs)导入。

When serialized, these references consist of two separate pieces of data: a File GUID and a Local ID. The File GUID identifies the Asset file where the target resource is stored. A locally unique(1) Local ID identifies each Object within an Asset file because an Asset file may contain multiple Objects.
序列化后,这些引用由两个单独的数据组成:文件GUID和本地ID。文件GUID标识存储目标资源的资产文件。本地惟一的(对于同一个资产文件本地ID唯一)Local ID标识资产文件中的每个对象,因为一个资产文件可能包含多个对象。

File GUIDs are stored in .meta files. These .meta files are generated when Unity first imports an Asset, and are stored in the same directory as the Asset.
文件GUIDs 存储在.meta文件中。这些.meta文件是在Unity首次导入资产时生成的,并与资产存储在同一个目录中。

The above identification and referencing system can be seen in a text editor: create a fresh Unity project and change its Editor Settings to expose Visible Meta Files and to serialize Assets as text. Create a material and import a texture into the project. Assign the material to a cube in the scene and save the scene.
上面的标识和引用系统可以在文本编辑器中看到:创建一个新的Unity项目并更改其编辑器设置,以公开可见的Meta 文件并将资产序列化作为文本。创建一个材质并将纹理导入到项目中。将材质分配到场景中的一个立方体中并保存场景。

Using a t

Unity中Newtonsoft.Json完整适配指南:从集成到性能优化 JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其可读性好、结构灵活,已成为现代软件开发中序列化与网络通信的基石。其核心原理是将数据结构转换为字符串,便于存储和传输,再通过反序列化还原为对象。在Unity游戏开发中,处理游戏配置、存档数据和服务器通信等场景,JSON序列化的技术价值尤为突出。然而,Unity自带的JsonUtility在应对复杂数据结构(如字典、多态类型)时能力有限,而直接引入功能强大的Newtonsoft.Json(Json.NET)又会面临 阅读详情

相关推荐

【Qt笔记】1.VSCode搭建Qt运行环境

Qt6之后已经抛弃qmake,使用cmake。cmake相对qmake来说只有优点没有缺点。使用VSCode搭建完Qt的运行环境就能开开心心debug了.vscode需要使用的插件:2.Qt tools3.CMakec++插件可以不关注,缺啥都会提醒你.正常安装即可。

没有手牌的博客 2万+

content-pipeline:一条可落地的内容生产流水线

content-pipeline 是一种将内容创作工程化的系统性方法,其核心在于用确定性流程替代碎片化人工操作。它基于结构化提示(prompt)、预置叙事框架与品牌参数固化三大原理,实现从素材输入到多平台发布的端到端自动化。技术价值体现在显著降低认知负荷、保障输出一致性、支持本地化资源绑定与闭环反馈校验。典型应用场景包括技术教程批量生成、跨平台(公众号/小红书/即刻)内容适配、AI写作质量可控迭代等。本文深入解析其作为‘内容制造业’基础设施的底层设计逻辑与实操路径,尤其聚焦Claude Code环境下的真实

weixin_31199559的博客 269

别再只测电压了!用STM32G474的ADC玩点花的:过采样提升精度与多通道扫描实战

本文深入探讨了STM32G474系列单片机的ADC高级应用,包括硬件过采样技术实现16位精度和多通道扫描结合DMA的自动数据采集方案。通过详细的配置步骤和实战案例,帮助开发者突破传统电压测量局限,提升信号采集精度和系统效率,适用于工业监控、医疗设备等高精度应用场景。

weixin_42647395的博客 240

评价模型——层次分析法(AHP)与熵权法(EWM)

层次分析法是定性与定量结合的多准则决策、评价方法。将决策的有关元素分解成目标层、准则层和方案层,并通过人们的判断对决策方案的优劣进行排序,在此基础上进行定性和定量分析。它把人的思维过程层次化、数量化,并用数学为分析、决策、评价、预报和控制提供定量的依据。

好好学习 天天向上 2万+

dbt+Snowflake实战:数据建模、权限隔离与性能优化全指南

dbt(data build tool)作为现代数据栈的核心建模工具,其与Snowflake的深度协同远不止于SQL编译执行——它本质是将软件工程实践(如版本控制、测试驱动、CI/CD)注入数据交付流程。理解dbt的声明式建模原理与Snowflake的虚拟仓库、Time Travel、TRANSIENT表、聚簇键等底层机制如何咬合,是实现可维护、可审计、低成本数据产品交付的关键。本文聚焦dbt在Snowflake环境中的真实落地挑战,涵盖schema与warehouse的物理映射设计、role级硬隔离策略、

weixin_34389926的博客 314

Loki 分布式日志中心服务

分布式日志中心 Loki + Promtail + Grafana

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2355

Firefox卸载卡住不动的解决方案

本文主要介绍了Firefox卸载卡住不动的解决方案,希望能对使用Windows的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 15万+

华为OD机试 - 比赛的冠亚季军(Python/JS/C/C++ 双机位C卷 100分)

有个运动员,他们的id为0到N-1,他们的实力由一组整数表示。他们之间进行比赛,需要决出冠亚军。比赛的规则是0号和1号比赛,2号和3号比赛,以此类推,每一轮,相邻的运动员进行比赛,获N (3\leq N< 10000)胜的进入下一轮,实力值大的获胜,实力值相等的情况,id小的情况下获胜,轮空的直接进入下一轮。(0 <= 实力值 <= 10000000000)。输入一行N个数字代表N的运动员的实力值。输出冠亚季军的id,用空格隔开。

学Java,找哪吒 1588

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: A guide to AssetBundles and Resources AssetBundles与Resources的指南 最佳实践系列2
下一篇: The Resources folder Resources文件夹 最佳实践系列4
cangod
博客等级 码龄10年 97粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值