6.30
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
|
||||
## TODO
|
||||
### ①Baker Group
|
||||
|
||||
|
||||
## Texture Baker
|
||||
合并多张纹理
|
||||
|
||||
## Texture Bake Results
|
||||
资源文件,记录合并材质球已经生成材质球
|
||||
![[Pasted image 20221021171104.png]]
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 71 KiB |
@@ -1,17 +0,0 @@
|
||||
谁是我们的敌人?谁是我们的朋友?这个问题是革命的首要问题。中国过去一切革命斗争成效甚少,其基本原因就是因为不能团结真正的朋友,以攻击真正的敌人。革命党是群众的向导,在革命中未有革命党领错了路而革命不失败的。我们的革命要有不领错路和一定成功的把握,不可不注意团结我们的真正的朋友,以攻击我们的真正的敌人。我们要分辨真正的敌友,不可不将中国社会各阶级的经济地位及其对于革命的态度,作一个大概的分析。
|
||||
|
||||
中国社会各阶级的情况是怎样的呢?
|
||||
|
||||
地主阶级和买办阶级。在经济落后的半殖民地的中国,地主阶级和买办阶级完全是国际资产阶级的附庸,其生存和发展,是附属于帝国主义的。这些阶级代表中国最落后的和最反动的生产关系,阻碍中国生产力的发展。他们和中国革命的目的完全不相容。特别是大地主阶级和大买办阶级,他们始终站在帝国主义一边,是极端的反革命派。其政治代表是国家主义派和国民党右派。
|
||||
|
||||
中产阶级。这个阶级代表中国城乡资本主义的生产关系。中产阶级主要是指民族资产阶级,他们对于中国革命具有矛盾的态度:他们在受外资打击、军阀压迫感觉痛苦时,需要革命,赞成反帝国主义反军阀的革命运动;但是当着革命在国内有本国无产阶级的勇猛参加,在国外有国际无产阶级的积极援助,对于其欲达到大资产阶级地位的阶级的发展感觉到威胁时,他们又怀疑革命。其政治主张为实现民族资产阶级一阶级统治的国家。有一个自称为戴季陶“真实信徒”的,在北京《晨报》上发表议论说:“举起你的左手打倒帝国主义,举起你的右手打倒共产党。”这两句话,画出了这个阶级的矛盾惶遽状态。他们反对以阶级斗争学说解释国民党的民生主义,他们反对国民党联俄和容纳共产党及左派分子。但是这个阶级的企图——实现民族资产阶级统治的国家,是完全行不通的,因为现在世界上的局面,是革命和反革命两大势力作最后斗争的局面。这两大势力竖起了两面大旗:一面是红色的革命的大旗,第三国际高举着,号召全世界一切被压迫阶级集合于其旗帜之下;一面是白色的反革命的大旗,国际联盟高举着,号召全世界一切反革命分子集合于其旗帜之下。那些中间阶级,必定很快地分化,或者向左跑入革命派,或者向右跑入反革命派,没有他们“独立”的余地。所以,中国的中产阶级,以其本阶级为主体的“独立”革命思想,仅仅是一个幻想。
|
||||
|
||||
小资产阶级。如自耕农,手工业主,小知识阶层——学生界、中小学教员、小员司、小事务员、小律师,小商人等都属于这一类。这一个阶级,在人数上,在阶级性上,都值得大大注意。自耕农和手工业主所经营的,都是小生产的经济。这个小资产阶级内的各阶层虽然同处在小资产阶级经济地位,但有三个不同的部分。第一部分是有余钱剩米的,即用其体力或脑力劳动所得,除自给外,每年有余剩。这种人发财观念极重,对赵公元帅礼拜最勤,虽不妄想发大财,却总想爬上中产阶级地位。他们看见那些受人尊敬的小财东,往往垂着一尺长的涎水。这种人胆子小,他们怕官,也有点怕革命。因为他们的经济地位和中产阶级颇接近,故对于中产阶级的宣传颇相信,对于革命取怀疑的态度。这一部分人在小资产阶级中占少数,是小资产阶级的右翼。第二部分是在经济上大体上可以自给的。这一部分人比较第一部分人大不相同,他们也想发财,但是赵公元帅总不让他们发财,而且因为近年以来帝国主义、军阀、封建地主、买办大资产阶级的压迫和剥削,他们感觉现在的世界已经不是从前的世界。他们觉得现在如果只使用和从前相等的劳动,就会不能维持生活。必须增加劳动时间,每天起早散晚,对于职业加倍注意,方能维持生活。他们有点骂人了,骂洋人叫“洋鬼子”,骂军阀叫“抢钱司令”,骂土豪劣绅叫“为富不仁”。对于反帝国主义反军阀的运动,仅怀疑其未必成功(理由是:洋人和军阀的来头那么大),不肯贸然参加,取了中立的态度,但是绝不反对革命。这一部分人数甚多,大概占小资产阶级的一半。第三部分是生活下降的。这一部分人好些大概原先是所谓殷实人家,渐渐变得仅仅可以保住,渐渐变得生活下降了。他们每逢年终结账一次,就吃惊一次,说:“咳,又亏了!”这种人因为他们过去过着好日子,后来逐年下降,负债渐多,渐次过着凄凉的日子,“瞻念前途,不寒而栗”。这种人在精神上感觉的痛苦很大,因为他们有一个从前和现在相反的比较。这种人在革命运动中颇要紧,是一个数量不小的群众,是小资产阶级的左翼。以上所说小资产阶级的三部分,对于革命的态度,在平时各不相同;但到战时,即到革命潮流高涨、可以看得见胜利的曙光时,不但小资产阶级的左派参加革命,中派亦可参加革命,即右派分子受了无产阶级和小资产阶级左派的革命大潮所裹挟,也只得附和着革命。我们从一九二五年的五卅运动和各地农民运动的经验看来,这个断定是不错的。
|
||||
|
||||
半无产阶级。此处所谓半无产阶级,包含:(一)绝大部分半自耕农,(二)贫农,(三)小手工业者,(四)店员,(五)小贩等五种。绝大部分半自耕农和贫农是农村中一个数量极大的群众。所谓农民问题,主要就是他们的问题。半自耕农、贫农和小手工业者所经营的,都是更细小的小生产的经济。绝大部分半自耕农和贫农虽同属半无产阶级,但其经济状况仍有上、中、下三个细别。半自耕农,其生活苦于自耕农,因其食粮每年大约有一半不够,须租别人田地,或者出卖一部分劳动力,或经营小商,以资弥补。春夏之间,青黄不接,高利向别人借债,重价向别人籴粮,较之自耕农的无求于人,自然景遇要苦,但是优于贫农。因为贫农无土地,每年耕种只得收获之一半或不足一半;半自耕农则租于别人的部分虽只收获一半或不足一半,然自有的部分却可全得。故半自耕农的革命性优于自耕农而不及贫农。贫农是农村中的佃农,受地主的剥削。其经济地位又分两部分。一部分贫农有比较充足的农具和相当数量的资金。此种农民,每年劳动结果,自己可得一半。不足部分,可以种杂粮、捞鱼虾、饲鸡豕,或出卖一部分劳动力,勉强维持生活,于艰难竭蹶之中,存聊以卒岁之想。故其生活苦于半自耕农,然较另一部分贫农为优。其革命性,则优于半自耕农而不及另一部分贫农。所谓另一部分贫农,则既无充足的农具,又无资金,肥料不足,土地歉收,送租之外,所得无几,更需要出卖一部分劳动力。荒时暴月,向亲友乞哀告怜,借得几斗几升,敷衍三日五日,债务丛集,如牛负重。他们是农民中极艰苦者,极易接受革命的宣传。小手工业者所以称为半无产阶级,是因为他们虽然自有简单的生产手段,且系一种自由职业,但他们也常常被迫出卖一部分劳动力,其经济地位略与农村中的贫农相当。因其家庭负担之重,工资和生活费用之不相称,时有贫困的压迫和失业的恐慌,和贫农亦大致相同。店员是商店的雇员,以微薄的薪资,供家庭的费用,物价年年增长,薪给往往须数年一增,偶与此辈倾谈,便见叫苦不迭。其地位和贫农及小手工业者不相上下,对于革命宣传极易接受。小贩不论肩挑叫卖,或街畔摊售,总之本小利微,吃着不够。其地位和贫农不相上下,其需要一个变更现状的革命,也和贫农相同。
|
||||
|
||||
无产阶级。现代工业无产阶级约二百万人。中国因经济落后,故现代工业无产阶级人数不多。二百万左右的产业工人中,主要为铁路、矿山、海运、纺织、造船五种产业的工人,而其中很大一个数量是在外资产业的奴役下。工业无产阶级人数虽不多,却是中国新的生产力的代表者,是近代中国最进步的阶级,做了革命运动的领导力量。我们看四年以来的罢工运动,如海员罢工、铁路罢工、开滦和焦作煤矿罢工、沙面罢工以及“五卅”后上海香港两处的大罢工所表现的力量,就可知工业无产阶级在中国革命中所处地位的重要。他们所以能如此,第一个原因是集中。无论哪种人都不如他们的集中。第二个原因是经济地位低下。他们失了生产手段,剩下两手,绝了发财的望,又受着帝国主义、军阀、资产阶级的极残酷的待遇,所以他们特别能战斗。都市苦力工人的力量也很可注意。以码头搬运夫和人力车夫占多数,粪夫清道夫等亦属于这一类。他们除双手外,别无长物,其经济地位和产业工人相似,惟不及产业工人的集中和在生产上的重要。中国尚少新式的资本主义的农业。所谓农村无产阶级,是指长工、月工、零工等雇农而言。此等雇农不仅无土地,无农具,又无丝毫资金,只得营工度日。其劳动时间之长,工资之少,待遇之薄,职业之不安定,超过其他工人。此种人在乡村中是最感困难者,在农民运动中和贫农处于同一紧要的地位。
|
||||
|
||||
此外,还有数量不小的游民无产者,为失了土地的农民和失了工作机会的手工业工人。他们是人类生活中最不安定者。他们在各地都有秘密组织,如闽粤的“三合会”,湘鄂黔蜀的“哥老会”,皖豫鲁等省的“大刀会”,直隶及东三省的“在理会”,上海等处的“青帮”,都曾经是他们的政治和经济斗争的互助团体。处置这一批人,是中国的困难的问题之一。这一批人很能勇敢奋斗,但有破坏性,如引导得法,可以变成一种革命力量。
|
||||
|
||||
综上所述,可知一切勾结帝国主义的军阀、官僚、买办阶级、大地主阶级以及附属于他们的一部分反动知识界,是我们的敌人。工业无产阶级是我们革命的领导力量。一切半无产阶级、小资产阶级,是我们最接近的朋友。那动摇不定的中产阶级,其右翼可能是我们的敌人,其左翼可能是我们的朋友——但我们要时常提防他们,不要让他们扰乱了我们的阵线。
|
||||
File diff suppressed because one or more lines are too long
@@ -1,3 +0,0 @@
|
||||
#SIMD
|
||||
|
||||
https://github.com/happyfire/URasterizer/tree/master/URasterizer 光栅接入Burst
|
||||
@@ -1,11 +0,0 @@
|
||||
|
||||
|
||||
- 一个普通加法指令,一次只能对两个数执行一个加法操作。
|
||||
- 一个 SIMD 加法指令,一次可以对两个数组(向量)执行加法操作。
|
||||
|
||||
一个寄存器存多个数据同时批量处理
|
||||
|
||||
|
||||
## CSharp中的SIMD
|
||||
位于 System.Numerics 下的Vector即可开始进行硬件级别上的处理
|
||||
Vector<T>.Count为寄存器能容纳的位数
|
||||
@@ -1,8 +0,0 @@
|
||||
|
||||
|
||||
单指令多线程
|
||||
一个指令 会有多条线程运行相同的指令
|
||||
英伟达会给出多个修饰符,例如:Bit Mask可以指定哪些线程干活 哪些空转,既可支持分支操作
|
||||
每个线程会进入锁步(lock-step)
|
||||
线程会进入被遮掩(be masked out)
|
||||
被遮掩的原因,例如:if(false) 或者循环次数不一致
|
||||
@@ -1,4 +0,0 @@
|
||||
https://zhuanlan.zhihu.com/p/68530142 Batch的前世今生
|
||||
|
||||
但是因为Pass不同
|
||||
透明度不同,可能需要半透明混合而另外一个不需要,就会形成两次[[DrawCall]]渲染层级不同等等原因
|
||||
@@ -1 +0,0 @@
|
||||
一个Batch即为同一批材质的游戏对象
|
||||
@@ -1 +0,0 @@
|
||||
CPU调用一次GPU即为一次
|
||||
@@ -1,3 +0,0 @@
|
||||
[关于Unity加载优化,你可能遇到这些问题 - 知乎](https://zhuanlan.zhihu.com/p/23733044)400 Model Not Exist
|
||||
|
||||
sk-da030f4a28444c8094d9db8b7655b4f7
|
||||
@@ -1,6 +0,0 @@
|
||||
[基于DOTS+DrawMeshInstancedIndirect的伤害数字渲染方案1:实现思路 - 知乎](https://zhuanlan.zhihu.com/p/718118444)
|
||||
|
||||
|
||||
[Unity3d HUD UI高性能方案 - 知乎](https://zhuanlan.zhihu.com/p/624580377)
|
||||
|
||||
[《重返帝国》HUD方案分析和实现 - 知乎](https://zhuanlan.zhihu.com/p/636610023)
|
||||
@@ -1,7 +0,0 @@
|
||||
|
||||
地址:[前端进阶算法10:别再说你不懂topk问题了 · Issue #73 · sisterAn/JavaScript-Algorithms (github.com)](https://github.com/sisterAn/JavaScript-Algorithms/issues/73)
|
||||
|
||||
解法:
|
||||
1、最小最大堆
|
||||
2、快速选择(快速排序+快速选择时基准恰好等于K时)
|
||||
3、中位数的中位数(BFPRT)算法
|
||||
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"nodes":[
|
||||
{"id":"ed3d4299af3c74e1","type":"text","text":"# BUG\n\n拖拽BoxSpan在滚动之后异常","x":-220,"y":-740,"width":250,"height":480},
|
||||
{"id":"0d8282c969461d99","type":"text","text":"# 目前\n\n默认状态 切换状态 是否回到默认状态\n\n支持输入监听配置\n{\n\t支持预输入配置\n}\n\n\n需要支持删除操作\n支持粘贴板操作\n\n实际的敌人\n","x":-1060,"y":-740,"width":250,"height":480,"color":"1"},
|
||||
{"id":"9ac5e140a1fddd90","type":"text","text":"# 重要\n\n需要一个Inspector面板\n\n滚轮缩放控制帧间隔宽度\n帧位置跟随宽度变化\n\n相机状态切换\n屏幕震动\n卡帧时间\n\n拖拽Box\n\n特效轨道\n{\n\t跟随节点\n\t\n}","x":-780,"y":-740,"width":250,"height":480,"color":"2"},
|
||||
{"id":"d0bcb2652c1d4cbf","type":"text","text":"# 低优先","x":-500,"y":-740,"width":250,"height":480,"color":"4"}
|
||||
],
|
||||
"edges":[]
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
- [【Unity】打包(五)](https://www.jianshu.com/p/4884cae1195d)
|
||||
|
||||
AssetBundle使用方式 上一篇文章涵盖了AssetBundle基础,包括各种底层的加载API。这篇文章主要讨论AssetBundles实...
|
||||
|
||||
|
||||
|
||||
- [【Unity】打包(四)](https://www.jianshu.com/p/11bcb4c4fb55)
|
||||
|
||||
AssetBundle基础 这篇文章讨论了AssetBundles。介绍了AssetBundles打包系统以及AssetBundles核心API...
|
||||
|
||||
|
||||
|
||||
|
||||
- [【Unity】打包(三)](https://www.jianshu.com/p/451b7640bc07)
|
||||
|
||||
Resources目录 这篇文章主要讨论Resources系统。这是一个允许开发者存储一个或多个文件或文件夹在Resources文件夹下,在运行...
|
||||
|
||||
|
||||
|
||||
- [【Unity】打包(二)](https://www.jianshu.com/p/0b9ed3bcffef)
|
||||
|
||||
Assets,Objects序列化 这是涵盖Assets,Resources和资源管理的一列文章中的第二篇。 这篇文章涵盖了Unity序列化系统...
|
||||
|
||||
|
||||
|
||||
- [【Unity】打包(一)](https://www.jianshu.com/p/13afc42e9fde)
|
||||
|
||||
AssetBundles和Resources的指南 这一系列文章对Unity引擎中Assets和resource管理进行深度探讨。试图为专家开发...
|
||||
|
||||
167
InBox/资源/资源导入.md
167
InBox/资源/资源导入.md
@@ -1,167 +0,0 @@
|
||||
# [【三思Unity】深入浅出资源管理之:Asset Import Pipeline v2(上)](https://www.cnblogs.com/hearthstone/p/13358025.html "发布于 2020-07-21 23:12")
|
||||
|
||||
每个游戏都是由种类繁多的资源构成,例如:网格、材质、纹理、着色器、动画、音频等。导入并管理这些资源文件,是游戏引擎必备的能力。资源管理包含两部分:离线管理和运行时管理。
|
||||
|
||||
在 Unity 2019 LTS 中,对应的解决方案分别是 Asset Import Pipeline v2(下文简称 AIP v2) 和 Addressable Asset System。本文主要讲解 AIP v2 部分, 包含 v2 相对于 v1 的改进之处,和完整的资源导入流程。
|
||||
|
||||
关键词:Asset Import Pipeline v2,Unity Accelerator,Asset Revisions,Asset Database
|
||||
|
||||
# 1. Asset Import Pipeline v2
|
||||
|
||||
资源导入是 Unity 中最耗时的工作流程之一,是 AIP v1 的遗留问题。针对其中最耗时的两个阶段——新资源的导入和平台切换,AIP v2 分别提供了对应的解决方案。
|
||||
|
||||
## 1.1 新资源的导入
|
||||
|
||||
第一次拉取项目时,项目中没有 Library 文件夹,这意味着 Assets 文件夹和 Packages 文件夹中的所有资源都需要经过 AIP 的导入处理,这步非常耗时。相较而言,直接拉取导入结果,耗时就要少几个数量级。
|
||||
|
||||
### Unity Accelerator
|
||||
|
||||
AIP v2 给出的方案是 Unity Accelerator,一种基于 Unity Collaborate 的局域网代理和缓存服务。原理是:团队中有一人导入完资源,导入结果被自动缓存到 Accelerator,团队里的其他成员在导入相同版本的资源时,Unity 首先检测 Accelerator 上是否已经有对应的导入结果,如果有就下载。因为是本地网络,带宽不是问题,所以在资源较多的项目中,下载时间要远少于导入时间。
|
||||
|
||||
在 Unity 给出的测试中,一个大小100MB、数量12000个的项目资源,Untiy 的导入时间为6分钟,Accelerator 的导入时间为30秒,节省了90%以上的资源导入时间。然而实际项目中,12000个资源的空间占用一般要大于100MB,因此该测试仅供参考。
|
||||
|
||||
Unity Accelerator 基于 Unity Teams Advaned,按团队人数收费。目前提供30天免费试用,25GB云存储,3人团队的价格是60元/月,每增加一名团队成员的价格是48元/月。
|
||||
|
||||
## 1.2 平台切换
|
||||
|
||||
在 AIP v1 中,Library 文件夹中缓存的导入结果以资源的GUID作为文件名。这天然的导致了一个资源只存在一个导入结果,因此每次切换平台都需要重新导入所有资源。这步非常耗时,在大型项目中甚至需要数个小时。
|
||||
|
||||
在 AIP v2 出现前,临时的解决方案是每个平台分别对应一个项目。缺点是要占用多份项目的硬盘空间,以及每个项目需要单独拉取更新。
|
||||
|
||||
### Asset Revisions
|
||||
|
||||
AIP v2 给出的解决方案是:不使用资源的GUID作为导入结果的文件名,而是使用资源所有依赖的哈希值作为文件名,而平台正是资源的依赖之一(资源依赖的说明见下文4.3)。于是每个资源因为依赖的不同,而拥有多个版本的导入结果,它们被称为资源的修订版(Asset Revisions)。因此 Asset Database 中可以同时缓存多个平台的导入结果,当切换至已经有导入结果的平台时,就不需要再经历耗时的导入处理。
|
||||
|
||||
AIP v2 同样存在占用硬盘空间大的缺点,但是相较于每个平台分别对应一个项目,占用空间要小很多。对此 AIP v2 也做了优化处理:只保存每个资源仅平台依赖不同的修订版,其他依赖导致的不同修订版,在 Unity 每次重启时会被删除。
|
||||
|
||||
# 2. 源文件 Source File
|
||||
|
||||
Source File 是指由 Unity 之外的软件创建并导出的资源文件。常见的有:图片(png、jpg、psd)、音频(wav、ogg、mp3)、视频(avi、wmv、mp4)、模型(fbx、obj、c4d、blend)、字体(ttf、otf、ttc)、着色器(cg、hlsl)、文本文件(txt、xml、json、csv)、代码文件(dll、jar、cpp、c、mm、dylib)等。
|
||||
|
||||
仅仅将 Source File 放入项目文件夹中,并不代表它成为了项目的一部分。只有经过 AIP 的导入处理,Soure File 转变成 Asset, 才能为项目所用。
|
||||
|
||||
导入处理将 Source File 转换成 Unity 能够处理的格式。这些格式往往硬件友好,能够让CPU、图形、音频等硬件立即处理。例如:Unity 在运行时不会直接使用 .png 格式的图片,而是使用经过导入处理后的某种具体格式的 texture 文件。
|
||||
|
||||
Pipeline 确保了导入结果的确定性,即:相同依赖的 Sourece File 经过导入处理,在任意时刻、任意设备得到的 Asset 是相同的。
|
||||
|
||||
# 3. 资源数据库 Asset Database
|
||||
|
||||
Asset Database 包含了两层含义。一层指 Source Files 经过 AIP 导入处理后的数据文件集合,即项目 Library 文件夹中的内容,又称为 Asset Cache。Unity 在项目运行和打包时,使用的正是这里面的数据文件。
|
||||
|
||||
另一层指 Unity 封装的 AssetDatabase 类。该类提供了对于 AIP 最重要的一个方法 Refresh,以及一系列方便安全的项目文件操作方法,例如:Contains、CreateAsset、CreateFolder、RenameAsset、CopyAsset、MoveAsset、DeleteAsset、LoadAssetAtPath等。
|
||||
|
||||
# 4. 刷新 Asset Database
|
||||
|
||||
将 Source File 放入项目 Assets 文件夹中时,或通过 Package Manager 导入 Package 时,AIP 检测到新资源,并执行导入处理。这一步的本质是触发了 AssetDatabase 的 Refresh 方法。
|
||||
|
||||
以下三种情况会触发 AssetDatabase 的 Refresh 方法:
|
||||
|
||||
1. Unity Editor 重新获得焦点(如果开启了 Auto-Refresh)。
|
||||
2. 点击 Assets > Refresh 菜单。
|
||||
3. 在 C# 代码中直接调用 Refresh 方法;或通过调用 CreateAsset、ImportAsset 等方法,间接触发 Refresh 方法。
|
||||
|
||||
AssetDatabase 的 Refresh 方法将按顺序执行以下步骤:
|
||||
|
||||
1. 寻找变更的 Assets,并更新 source Asset Database(Library 文件夹中)
|
||||
2. 导入并编译代码相关文件
|
||||
3. 重载脚本域
|
||||
4. 导入非代码文件
|
||||
5. 热重载
|
||||
6. 更新 Artifact Database(Library 文件夹中)
|
||||
|
||||
接下来将对上述步骤做较详细介绍,其中某些步骤会被拆分为几个小步骤。
|
||||
|
||||
## 4.1 寻找变更的 Assets
|
||||
|
||||
当触发了 AssetDatabase.Refresh() 方法后,Unity 开始扫描项目中 Assets 文件夹和 Packages 文件夹中的每个资源。与上次扫描相比,如果资源出现了新增、变更或删除,则将它添加到一个资源变更列表中。
|
||||
|
||||
## 4.2 更新 source Asset Database
|
||||
|
||||
计算资源变更列表中的每个资源的哈希值,并且根据它们的GUID,更新 source Asset Database,并从列表中删除对应资源。
|
||||
|
||||
## 4.3 依赖追踪(Dependency tracking)
|
||||
|
||||
资源的依赖(Dependencies)是指所有能够影响导入结果的数据。资源的 Source File 是最原始的依赖,资源的导入设置、目标平台等也都是依赖。
|
||||
|
||||
**资源变更的本质,是资源依赖的变更**。AIP 追踪了每个资源的所有依赖。资源的任意依赖发生变更,都将引起资源的重新导入,生成新的导入结果。
|
||||
|
||||
**资源变更的结果,是不同版本的资源缓存**。AIP 维护了项目所有资源的导入结果,这些导入结果缓存在 Library 文件夹中,又叫做资源缓存(Asset Cache)。同一个资源的不同导入结果,是不同版本的资源缓存,又称为资源的修订版(Asset Revisions)。
|
||||
|
||||
## 4.4 导入并编译代码相关文件
|
||||
|
||||
Unity 从资源变更列表中收集与代码相关的文件,递送给脚本编译管线(script compilation pipeline)。然后编译器根据脚本文件和 assembly definition 文件生成程序集(Assemblies)。
|
||||
|
||||
## 4.5 重载脚本域(Reload the domain)
|
||||
|
||||
域重载(Domain Reloading)处理会完全重置脚本的状态,包括重置所有静态字段和静态事件句柄。任意脚本的变更,都会重载脚本域。为了确保自定义导入器(Scripted Importer)起作用,这步将重启 AssetDatabase.Refresh() 方法。
|
||||
|
||||
## 4.6 导入非代码资源
|
||||
|
||||
AIP 基于资源文件名的扩展名识别文件类型,再基于文件类型使用对应的导入器(Asset Importer)处理资源。例如:TextureImporter 负责导入 jpg、png 和 psd 等图片资源。导入器分为两种:原生导入器(Native Importers)和自定义导入器(Scripted Importers)。
|
||||
|
||||
### 4.6.1 原生导入器(Native Importers)
|
||||
|
||||
Unity 内置了很多原生导入器,支持大多数资源类型,例如:图片、音频、视频、模型、材质、着色器、字体、文本文件、代码文件等。
|
||||
|
||||
### 4.6.2 自定义导入器(Scripted Importers)
|
||||
|
||||
对于新的资源类型,我们可以编写自己的导入器。对于 Unity 已经提供了导入器的资源类型,也可以使用自定义导入器覆盖原生的导入处理。
|
||||
|
||||
部分 Unity 内置的导入器也属于自定义导入器,因此这些导入器的处理,发生在自定义导入器的处理阶段。例如:StyleSheetImporter(uss 文件)、UIElementsViewImporter(uxml 文件)。
|
||||
|
||||
## 4.7 预处理(Preprocess)和后处理(Postprocess)
|
||||
|
||||
在导入阶段,有许多回调方法,可用于资源导入的预处理和后处理。
|
||||
|
||||
预处理方法有:
|
||||
|
||||
- OnpreprocessAsset
|
||||
- OnpreprocessAnimation
|
||||
- OnpreprocessAudio
|
||||
- OnpreprocessModel
|
||||
- OnpreprocessSpeedTree
|
||||
- OnpreprocessTexture
|
||||
|
||||
后处理方法有:
|
||||
|
||||
- OnAssignMaterialModel
|
||||
- OnPostprocessAnimation
|
||||
- OnPostprocessAssetbundleNameChanged
|
||||
- OnPostprocessAudio
|
||||
- OnPostprocessCubemap
|
||||
- OnPostprocessGameobjectWithAnimatedUserProties
|
||||
- OnPostprocessWithUserProperties
|
||||
- OnPostprocessMaterial
|
||||
- OnPostprocessMeshHierarchy
|
||||
- OnPostprocessModel
|
||||
- OnPostprocessSpeedTree
|
||||
- OnPostprocessSprites
|
||||
- OnPostprocessTexture
|
||||
- OnPostprocessAllAssets
|
||||
|
||||
## 4.8 重启 AssetDatabase 的 Refresh 处理
|
||||
|
||||
在上文中提到,重载脚本域将重启 AssetDatabase.Refresh() 方法。除此以外,还有其他情况会重启 AssetData base 的 Refresh 处理。例如:
|
||||
|
||||
- 如果某个资源导入失败
|
||||
- 如果资源在 Refresh 中的导入阶段被更改
|
||||
- 如果资源在导入时生成了其他资源
|
||||
- 如果在预处理/后处理回调方法中强制重新导入某个文件,例如:在 OnPostProcessAllAssets 方法中使用 AssetDatabase.ForceReserializeAssets 方法或 AssetImport.SaveAndReimport 方法。注意避免无限重导入。
|
||||
- 如果在编译完脚本后,某个程序集需要重新加载。
|
||||
- 如果以“Text only”保存某个资源,但是该资源必须被序列化为二进制格式,就会触发 Refresh 处理。例如:带有地形的场景必须被序列化为二进制格式,因为文本格式太笨重。
|
||||
|
||||
## 4.9 热重载 Hot reloading
|
||||
|
||||
热重载是指在 Editor 不重启的情况下,导入并应用脚本和资源的变更。热重载在 Editor 的 Play Mode 和非 Play Mode 都有可能发生。
|
||||
|
||||
当你更改并保存一个脚本文件时,Unity 首先保存所有已加载脚本的序列化变量,等脚本加载完成再恢复这些数据。在热重载完成后,所有非序列化的数据都将丢失。
|
||||
|
||||
## 4.10 更新 Artifact Database
|
||||
|
||||
这是 Refrech 的最后一步,Library 文件夹中的 Artifact Database 被更新,导入结果被保存在硬盘上。
|
||||
|
||||
# 引用参考
|
||||
|
||||
[1] [The new Asset Import Pipeline: Solid foundation for speeding up asset imports](https://blogs.unity3d.com/cn/2019/10/31/the-new-asset-import-pipeline-solid-foundation-for-speeding-up-asset-imports/)
|
||||
[2] [The Asset Database](https://docs.unity3d.com/Manual/AssetDatabase.html)
|
||||
[3] [Refreshing the Asset Database](https://docs.unity3d.com/Manual/AssetDatabaseRefreshing.html)
|
||||
Reference in New Issue
Block a user