目录

一、资源加载种类

二、AssetBundle使用

三、大世界实现方案

四、大世界优化

 

 

一、资源加载种类

1.Resource.Load() Resource.Load是Unity加载Resources文件夹的加载方式,Resources文件夹会随着打包一起被打到游戏包内。

Unity资源加载及资源管理

2.UnityEditor.AssetDatabase.LoadAssetAtPath() Editor下的加载方式,加载路径是项目下的路径,除了Resources文件夹都不会随着打包打到游戏本体内。

Unity资源加载及资源管理

3.AssetBundle.Load() 加载Asset Bundle,SteamingAsset(可读写)可以用于热更资源。

Unity资源加载及资源管理

 

二、AssetBundle说明

Unity资源加载及资源管理

 

Unity资源加载及资源管理

镜像文件和Asset以及GameObject的关系

 

Unity资源加载及资源管理

Unload(true)卸载Asset会让场景中的GameObject也丢失

 

二、AB使用流程

1.设计AB

2.Build AB 和 上传

3.加载Load

4.cache

5.实例化Instantiate

 

1.设计AssetBundle包

Unity资源加载及资源管理

Unity资源加载及资源管理

应用:

RedirectRes每个资源打成一个Asset 其他按照一定策略打包 一个主题多张贴图打成一张贴图 主题包括其他主题的情况。

 

2.Build AssetBundles及上传

使用接口BuildPipeline.BuildAssetBundles()

Unity资源加载及资源管理

 

3.同步加载

Unity资源加载及资源管理

 

4.AB异步加载

目的:缓解同步加载卡顿 项目接口:ResourceMgr.LoadAsync(path,callback) 注意事项:①无callback不会增加引用次数 ②异步的时候同步加载会造成冲突

Unity资源加载及资源管理

 

5.Cache

cache了加载好的Obj,用于下次调用返回

每次调用进行了计数+1

调用Unload可以-1

 

6.卸载AB

如何卸载:当asset引用为0 调用UnloadUnuseAssets 下次GC便会清除

目的:  游戏内容多,导致内存过大 原本只在切换场景的时候才会清空cache和UnloadUnuse

过程: UnloadAB→调用UnloadUnUseAssets→GC

 

三、大世界实现方案

实现核心:拼接、门连通 

Unity资源加载及资源管理

 

 

四、大世界优化

1.加载卡顿

2.实例化卡顿

3.加载与实例化卡顿处理

4.内存

5.脚本

6.shader预加载

7.UI合批

8.恶性GC

9.资源太大

 

1.加载卡顿 - 同步加载

问题: 使用同步加载顿卡严重

解决: 分帧加载

问题: 持续小卡顿

解决: 做了异步加载

 

1.加载卡顿 - 异步加载

使用异步加载 ①加载开始瞬间gc.alloc很高(高峰有1w次左右)

问题:资源大、依赖多、代码构造函数申请多

②异步LockPersistenManger 

Unity资源加载及资源管理

 

2.实例化卡顿 - 分析

测试方法: stopwatch/profiler.takesample

测试对象: Node 怪物

 

3.卡顿处理

①Node拆分处理

Logic:只有碰撞的scene和wall Machine:机关,包括传送门和NPC和破碎物

RenderNode:只有场景      →RenderPart(美术需求周目变化)      →未来更细的拆分,或者使用池复用

②加载策略

同步加载:LogicNode

异步加载:RenderNode、RenderPart、MachineNode、怪物、NPC

分帧加载/删除:Node三部分、NPC、怪物

预加载:Node、1个地图传送、2个点对点传送

③使用池:传送门、怪物、特效

 

4.内存问题 - 分析

Unity资源加载及资源管理

问题: 除了切换场景,不会释放ab和asset, 导致大世界在多次传送后内存高 情况二:加载了保持引用

解决: 调用unload(true) 当asset没有引用时调用unloadunuse

 

4.内存问题

内存泄漏: ①加载了,不使用却保持引用 ②Load/LoadAsync会使次数+1 unload的次数比load少

解决方向: 上层池管理,底层只负责unload

 

5.脚本问题

 

6.Shader预加载

问题: Shader的问题居多 第一次加载和WarmUp总是卡

解决: ShaderVariantCollection

 

7.UI合批

 

8.恶性GC

①不要在TriggerStay/Update内获取Lua数据和GetComponent   

⑤频繁new变量、装拆箱

 

9.资源太大

 

------------------------------------------------

 

end

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-05-10
  • 2021-09-15
  • 2021-08-21
  • 2022-01-15
  • 2022-12-23
  • 2021-12-12
猜你喜欢
  • 2022-12-23
  • 2021-04-13
  • 2021-05-27
  • 2022-12-23
  • 2021-06-29
  • 2021-11-20
相关资源
相似解决方案