Unity中的资源——Asset

Unity中的资源——Asset


文章目录

  • Unity中的资源——Asset
    • 什么是Asset
    • 什么是Objects
    • Unity文件、文件引用、Meta详解
    • Meta文件详解——Unity GUID/ FileID/ InstanceID系统
    • 总结
    • 参考文章


什么是Asset

Asset理解为Unity能够识别的文件。即Projects窗口里看到的单个文件(或者文件夹),Unity会自动为其生成一个.meta文件。
这里其实又包含两种类型,一种是Unity原生支持的格式,比如:材质球;
一种是需要经过Unity处理之后才能支持的,比如:FBX。
对于需要处理才能支持的格式,Unity都提供了导入器(Importer),经过Unity处理之后存放在Library目录下。
在Unity中点击这样的资源,在Inspector面板会出现设置界面。

什么是Objects

而Objects这里我们指的是从UnityEngine.Object继承的对象,它其实是一个可以序列化的数据,用来描述一个特定的资源的实例。
它可以代表任何Unity引擎所支持的类型,比如:Mesh、Sprite、AudioClip or AnimationClip等等。

大多数的Objects都是Unity内置支持的,但有两种除外:ScriptableObject,MonoBehaviour。
ScriptableObject:用来提供给开发者进行自定义数据格式的类型。从该类继承的格式,都可以像Unity的原生类型一样进行序列和反序列化,并且可以从Unity的Inspector窗口进行操作。
MonoBehaviour:提供了一个指向MonoScript的转换器。MonoScript是一个Unity内部的数据类型,它不是可执行代码,但是会在特定的命名空间和程序集下,保持对某个或者特殊脚本的引用。
Asset 和 Objects之间是一对多的关系,比如一个Prefab我们可以认为是一个Asset,但是这个Prefab里可以包含很多个Objects,比如:如果是一个UGUI的Prefab,里面就可能会有很多个Text、Button、Image等组件。

Unity文件、文件引用、Meta详解

Assets下常见的资源分为6种:
——1.资源文件:FBX文件、贴图文件、音频文件、视频文件和动画文件等。像这类文件,Unity中都会在导入时进行转化,每一个类型都对应一个AssetImporter。
——2.代码文件:代码文件包括所有的代码文件、代码库文件、Shader文件等。在导入时,Unity会进行一次编译。
——3.序列化文件(数据文件):序列化文件通常是指Unity能够序列化的文件,一般是Unity自身的一些类型,比如Prefab(预制体)、Unity3d(场景)文件、Asset(ScriptableObject)文件、Mat文件(材质球),这些文件能够在运行时直接反序列化为对应类的一个实例。
——4.文本文档:文本文档比较特殊,它不是序列化文件,但是Unity可以识别为TextAsset。很像资源文件,但是又不需要资源文件那样进行设置和转化,比如txt、xml文件等等。
——5.非序列化文件:非序列文件是Unity无法识别的文件,比如一个文件夹也会被认为是一个文件,但是无法识别。
——6.Meta文件:Meta文件在Unity中的作用非常关键,它有2个作用:

  • 定义在它同目录下,同名的非Meta文件的唯一ID:GUID。而对于Unity的序列化文件来说,引用对象用的就是这个GUID。所以一旦Meta中的GUID变更了,就要注意,它很可能引起一场引用丢失的灾难(可以通过GUID找回)。
  • 存储资源文件的ImportSetting数据。在上文中资源文件是有ImportSetting数据的,这个数据正数存储在Meta文件中。ImportSetting中专门有存储Assetbundle相关的数据。这些数据帮助编辑器去搜集所有需要打包的文件并分门别类。所以每一次修改配置都会修改meta文件。

Meta文件详解——Unity GUID/ FileID/ InstanceID系统

——1.GUID:通过GUID就可以找到工程中的这个文件,无论它在项目的什么位置。在编辑器中使用AssetDatabase.GUIDToAssetPath和AssetDatabase.AssetPathToGUID进行互转。
——2.ImportSetting数据:由于这个数据的存在,把一个文件和这个文件的Meta文件从一个Unity工程复制到另一个Unity工程中,它的配置是不会变的。
——3.LocalID:对于一个文件下有多个文件的情况,就需要另外一个ID来表示,这就是LocalID。Meta文件中叫FileID。

  • 对于资源文件,非序列化文件,由于一般不会去更改源文件,所以FileID存储在meta文件中。例如Texture、Material、Animation等,这些文件每一类的LocalID都是一样的(例如所有的Texture2D的fileID都是2800000)。
  • 对于序列化文件(比如prefab、scene),自身数据里面会存储自身的FileID,也会记录所有子文件的FileID,各个Object的fileID都不相同,由Unity随机分配。

——4.InstanceID:该ID是运行时生成的,每个Object的InstanceID唯一,我们可以通过 Object.GetInstanceID 的API来获取。

一个Prefab中的GameObject组件:— !u!1 &5430584720211674993 (1表示Class ID,&后面的是LocalID)Unity通过GUID找到任何一个文件,通过LocalID找到其中的某个子文件。
如果打包的时候不希望引用某个资源,遍历所有的Asset,通过比较GUID,设置 {fileID: 0} 即可。

总结

在Unity中,一个Asset通常是由一个或多个对象构成。在序列化文件中,每个记录在&符号后面的数字都是一个Local ID,每一个Local ID也表示它将来也会被实例化成一个对象。也就是说,当一个prefab文件要实例化成一个GameObject时,它会自动尝试获取其内部Local ID所指的那个对象。如果这个所指的对象当前还没有被实例化出来,那么Unity会自动实例化这个对象,如此递归,直到所有涉及的对象都被实例化。已经完成实例化的对象会分配一个Instance ID。

参考文章

Unity文件、文件引用、Meta详解
Unity官方:AssetWorkflow
知乎-王江荣:【Unity】Asset简介
Understanding Unity’s serialization language, YAML

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.2 Windows驱动开发:内核CR3切换读写内存

CR3是一种控制寄存器,它是CPU中的一个专用寄存器,用于存储当前进程的页目录表的物理地址。在x86体系结构中,虚拟地址的翻译过程需要借助页表来完成。页表是由页目录表和页表组成的,页目录表存储了页表的物理地址,而页表…

使用Sui天气预言机获取全球实时天气数据

新的Sui天气预言机为全球1000多个城市的建设者提供天气数据,并作为一个独特的随机数生成器,适用于需要可信赖的随机结果的游戏和投注应用。它由基于Sui的智能合约和一个从OpenWeather API获取天气数据的后端服务组成,任何人都可以将天气数据集…

SpringCloudAlibaba之Nacos——详细讲解

目录 一、SpringCloudAlibaba简介 1. spring cloud alibaba 特点 2.springcloud 组件 二、环境搭建 1.构建项目并引入依赖 三、Nacos 1.什么是Nacos 2.安装Nacos 3.启动安装服务 4.访问nacos的web服务管理界面 四、开发服务注册到nacos 1.创建项目并引入依赖 2.配置注册地…

【Linux】了解进程的基础知识

进程 1. 进程的概念1.1 进程的理解1.2 Linux下的进程1.3 查看进程属性1.4 getpid和getppid 2. 创建进程3. 进程状态4. 进程优先级5. 进程切换6. 环境变量7. 本地变量与内建命令 1. 进程的概念 一个已经加载到内存中的程序,叫做进程(也叫任务&#xff09…

OWASP TOP 10 2021 对应的CWE缺陷(官方)

在OWASP TOP 10 2021年发布TOP 10中,比较好的给出了每类漏洞类型对应的CWE编号,这对于开发应用安全的厂商来说无疑是一件好事。 不过大家应该也可以看到,A1-A10都是给出了几种CWE,但是官方并没有给出比较全面的的对应关系&#xf…

Python+Selenium WebUI自动化框架 -- 基础操作封装

前言: 封装Selenium基本操作,让所有页面操作一键调用,让UI自动化框架脱离高成本、低效率时代,将用例的重用性贯彻到极致,让烦人的PO模型变得无所谓,让一个测试小白都能编写并实现自动化。 知识储备前提&a…

ethtool -T显示ptp过滤器信息源码分析

ptp过滤器 新设备使用ethtool -T显示ptp过滤器信息: linux_cx7110:~# ethtool -T eth0 Time stamping parameters for eth0: Capabilities:hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE)software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)hardware-r…

中小型公司如何搭建运维平台,rancher、kubersphere、rainbond

很多开发人员应该是了解过运维发布相关的平台或实际操作过应用发布,但又通常不是十分熟悉。在一个初创公司,或者没有成熟的运维发布平台的公司,如果让你来搭建一套发布平台,你应该如何去抉择呢? 这里我简单介绍几种。…

本地开启https,配置nodeJs服务

服务端和客户端各有一对公钥和私钥,使用公钥加密的数据只能用私钥解密,建立https传输之前,客户端和服务端互换公钥。客户端发送数据前使用服务端公钥加密,服务端接收到数据后使用私钥解密,反之亦如此。 1. 公钥私钥的…

【Linux】:信号在内核里的处理

信号的发送和保存 一.内核中的信号处理二.信号集操作函数1.一些信号函数2.sigprocmask3.sigpending4.写代码 三.信号在什么时候处理的四.再谈地址空间 一.内核中的信号处理 1.实际执行信号的处理动作称为信号递达(Delivery )2.信号从产生到递达之间的状态,称为信号未决(Pending…

『 Linux 』僵尸进程与孤儿进程

文章目录 🚀僵尸进程 - Z(zomble)🛰️ 僵尸状态与死亡状态的区别 🛰️🛰️ 僵尸状态的危害 🛰️ 🚀孤儿进程🛰️ 为什么托孤 🛰️ 🚀僵尸进程 - Z(zomble) 一个进程的创…

米贸搜| Youtube运营:免费涨粉的16个技巧

1、要求观众订阅你的频道 要求用户订阅你的频道无非是再简单不过的方法了,有时你需要做的只是一个及时的提醒而已。红色的订阅按钮通常很难被忽略,但是你可能还需要提醒用户点击订阅按钮旁边的“铃铛”图标,以打开消息提醒,以便在…

vue找依赖包的网址

https://www.npmjs.com/ 浅收藏一下

心大数据结构题型

选择题 2021 数据处理的单位:数据元素 矩阵压缩存储 2022 ①单链表头插法选择 ②矩阵压缩存储,行优先 ③删除链表节点的时间复杂度 ④稀疏矩阵存储 ⑤平衡二叉树时间复杂度 ⑥栈和队列的出队,问栈的大小至少多少 ⑦拓扑排序 ⑧参考书 360…

30.0/集合/ArrayList/LinkedList

目录 30.1什么是集合? 30.1.2为什么使用集合 30.1.3自己创建一个集合类 30.1.3 集合框架有哪些? 30.1.2使用ArrayList集合 30.2增加元素 30.3查询的方法 30.4删除 30.5 修改 30.6泛型 30.1什么是集合? 我们之前讲过数组,数组中它也可以存放多个元素。集合…

关于torch.backends.cudnn.benchmark = True

cuDNN 是英伟达专门为深度神经网络所开发出来的 GPU 加速库,针对卷积、池化等等常见操作做了非常多的底层优化,比一般的 GPU 程序要快很多。大多数主流深度学习框架都支持 cuDNN,PyTorch 自然也不例外。在使用 GPU 的时候,PyTorch…

Cenos7系统通过链接一键安装LAMP项目环境(linux,apache,mysql,php)

前言:嫌装环境麻烦,以下介绍自动安装环境的方法 一.环境配置 根据自己需要选择 操作系统:CenOS 7.x以上Web服务器:Apache 2.4数据库:MySQL 5.7开发框架:ThinkPHP 5.0(PHP5.0以上)…

CountDownLatch和CyclicBarrier源码详解

其他系列文章导航 Java基础合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、CountDownLatch和CyclicBarrier 二、CountDownLatch源码分析 三、CyclicBarrier源码分析 四、总结 前言 我现在有个场景:现在我有50个任务&…

【Web】NewStarCtf Week2 个人复现

目录 ①游戏高手 ②include 0。0 ③ez_sql ④Unserialize? ⑤Upload again! ⑥ R!!C!!E!! ①游戏高手 经典前端js小游戏 检索与分数相关的变量 控制台直接修改分数拿到flag ②include 0。0 禁了base64和rot13 尝试过包含/var/log/apache/access.log,ph…

Git 入门指南

什么是 Git? Git 的目前最流行的分布式版本控制软件,可以帮助我们高效敏捷的处理任何项目。 版本管理 要理解 Git 我们首先要理解版本管理。 版本管理就是开发过程中用于管理对文件、目录或者工程等内容的修改历史,可以让我们方便的查看历史…