关于Unity加载优化,你可能会遇到这些问题

2023-11-13

关键词

资源加载、卸载

实例化实例化

资源管理方法

一、资源加载

Q1:Shader 是独立打包的。如果我在开始游戏的时候加载一次,以后切换场景时就不用每次加载了吗?

确切地说,要实现后续Shader不加载开销,需要满足以下两个条件:

(1)包含Shader的AssetBundle文件常驻内存;

(2)着色器已完全加载;

只要满足这两个条件,后续加载的依赖于这些Shader的GameObject就会被直接使用,没有加载和解析的开销。

Q2:假设有两个接口Panel A和Panel B,它们都依赖一个共享的Atlas C,打包AssetBundle的时候,如果我们单独打包,使用的时候可以不卸载AssetBundle C吗?如果 Atlas C 在 Panel A 和 B 加载之前被加载到内存中,但 AssetBundle C 被卸载,那么在 Panel A 和 B 加载和实例化时会不会有问题?

是的,不只是Panel和Atlas,只要A或B依赖于C,就必须保证A或B在加载或实例化时,C的AssetBundle必须存在于内存中。如果之前卸载了C对应的AssetBundle,那么在加载或实例化A和B时,引擎将无法自动将C绑定到A和B上使用。

关于AssetBundle依赖打包,我们在之前的分享【揭开AssetBundle庐山真面目】中已经提到过。

Q3:什么是Loading.UpdatePreloading?为什么突然这么高?一般有什么办法可以优化吗?

这是 Unity 引擎的主要加载功能。切换场景或主动动态加载资源时,此项一般较大。一般来说,加载资源越复杂,Loading.UpdatePreloading的耗时就越多。

在优化之前,必须定位该函数的CPU使用瓶颈。下图是我们的案例项目,UWA评估报告中Loading.UpdatePreloading函数的整体CPU分配情况。通过这些堆栈信息unity 异步加载场景,开发团队可以一目了然地看到函数的耗时分配,从而进行有针对性的优化。

Q4:关于Loading.ReadObject成本高,有什么推荐的方法吗?

Loading.ReadObject是Unity引擎的资源加载函数,一般在切换场景和加载API调用时发生,包括纹理、网格、Material、Shader、AnimationClip等资源。如果你发现这个值太高,建议大力优化加载的相关资源。对于每一个资源的加载,我们都以专题的方式进行总结和分享。建议您先检查以下内容:

加载模块纹理

加载模块的网格

加载模块的着色器

加载模块的动画片段

Q5:我使用了Shader.WarmupAllShaders操作,加载资源后依然出现CreateGPUProgram。 (Shaders都在一个AssetBundle文件中,都是常驻内存,不会被删除)是否需要使用ShaderVariantCollection来加载Shaders?

上述问题的可能是:Shader被打包到不同的AssetBundle中,而WarmupAllShaders只能对当前内存中的Shader进行预热。如果稍后加载另一个 Shader,仍然会发生 CreateGPUProgram 操作。

建议开发团队使用UWA的资源检测工具检测AssetBundle中Shader的具体打包情况,看看是否存在冗余打包问题。

Q6:我们对 UWA 进行了性能测试,发现在 Android 上同步加载 AssetBundle 资源会消耗大量 CPU。因此,我们最近对资源加载方式进行了比较大的调整。大多数资源都是异步加载的。但是这里有个问题我要问:AssetBundle.LoadAsync和WWW加载方式都可以异步加载AssetBundle,但是两者的API特性也不同。目前,WWW 消耗更多的内存。这两种方法哪个更推荐?物种?

AssetBundle.LoadAsync是获取AssetBundle对象后加载资产;而WWW加载是为了获取AssetBundle,两者的作用是不同的。

开发人员可能想了解几种用于异步加载 AssetBundle 的 API 之间的区别。相关接口如下:

new WWW 
WWW.LoadFromCacheOrDownload

这两种方式的具体区别请参考《你应该知道的AssetBundle管理机制》中的“AssetBundle加载进阶”部分。

二、资源卸载

Q1:切换场景时,卸载前一个场景总感觉很费时间。您有什么推荐的解决方案吗?

这是Unity在切换场景时调用Resources.UnloadUnusedAssets函数造成的。通常,开销相对较大。建议开发团队通过UWA性能测试,进一步定位加载模块中卸载场景的罪魁祸首。

Q2:Resources.UnloadUnusedAssets() 不仅限于 Resources.Load 资源,还包括 AssetBundle.Load 资源,对吧?

是的,Resources.UnloadUnusedAssets 也可以卸载 AssetBundle.Load 加载的资源,但前提是对应的 AssetBundle 已经调用了 Unload(false) 并且没有被引用。

Q3:我用UGUI做的界面有背景图。游戏中不进行任何处理。关闭并销毁界面后,图片还在内存中,但是我已经调用了Resources.UnloadUnusedAssets,如下图所示。我的预设没有标记为 AssetBundle,它们是在资源路径中加载的。请问是什么原因?

在使用Resources.Load加载UI界面的情况下,即使“关闭并销毁该界面”,Resources.UnloadUnusedAssets仍然无法卸载对应的图集。因为此时Resources.Load加载的Prefab仍然引用了图集。

在这种情况下,我们的建议是手动调用Resources.UnloadAssets手动释放图集(可以通过Sprite.texture找到对应的图集),当UI界面重新实例化时,图集也会自动执行重新加载。

Q4:使用 Resources.UnloadAsset 释放未实例化的 Object 会导致以下错误:Unload Assets 只能用于单个资产,不能用于 GameObject's/Components 或 AssetBundles。如何解决?

Resources.UnloadAsset 只能释放非GameObject和Component资源,如Texture、Mesh等真实资源。 Prefab加载的Object或Component,无法通过该函数释放。

Q5:我在 Profiler 中看到 GC.MarkDependencies 的 CPU 消耗是 900ms+,虽然在退出战斗时调用了 Resources.UnloadUnusedAssets();但冻结仍然很明显。您有什么推荐的解决方案吗?

GC.MarkDependencies 的消耗是由 Resources.UnloadUnusedAssets 引起的。该功能的主要目的是查找和卸载不再使用的资源。游戏场景越复杂,资源越多,这个函数的开销就越大,一般在300~2000ms的范围内。所以我们在UWA报告中加入了这个功能的调用监控,让大家更好的控制它的调用。

对于这个功能的优化,我们建议一方面控制场景中不必要的资源量,同时通过UnloadAsset及时卸载不再使用的资源,以减少耗时压力Resources.UnloadUnusedAssets。

以后我们会在加载模块的相关文章中详细讲解Resources.UnloadUnusedAssets的性能问题,敬请期待。

Q6:我有一个使用图集的 UI 预设,当我打包它时,我将图集和 UI 输入到 AssetBundle 中。我在加载生成GameObject后立即卸载了AssetBundle对象,但后来销毁GameObject时,发现图集依然存在。什么情况?

这很有可能。 unload(false) 卸载 AssetBundle 不会破坏其加载的资源。您必须调用 Resources.UnloadUnusedAssets。关于 AssetBundle 加载的详细解释,请参考我们之前的文章:AssetBundle 管理机制你应该知道的。

Q7:如果先Destroy Prefab,再Unload Prefab中使用的AssetBundle,这个顺序会不会有问题?在手机上测试的时候,发现内存会一直存在,不会被释放;如果反转,则可以释放。另外,我调用了 Resources.UnloadUnusedAssets();在Destroy期间,这会影响最终结果吗?

这确实可能发生。当 Resources.UnloadUnusedAssets(); ,如果没有执行 AssetBunlde 的 Unload 操作,从 AssetBunlde 加载的资源仍然不会被卸载,因为它们被 AssetBunlde 引用。开发团队可以尝试Dest​​ory然后做AssetBunlde的Unload,最后做Resources.UnloadUnusedAssets(); .

三、管理

Q1:Unity 现在不能将场景与 NavMesh 数据或 Lightmap 数据分开,可以吗?我想先加载一个干净的场景,然后动态切换不同的光照贴图和NavMesh网格数据,有什么办法吗?

光照贴图可以从场景中分离出来,并且可以通过 AssetBundle 动态加载。建议将Lightmap打包为通用资源,动态加载后,通过LightmapSetting接口将场景的Lightmap整体替换掉。目前,Navmesh 确实离不开现场。但是在Unity 5.x版本之后,引擎已经允许通过LoadLevelAdditive加载多个场景来加载NavMesh。因此,研发团队可以尝试在多个场景中预烘焙NavMesh,然后通过LoadLevelAddtive或类似API进行加载,从而达到动态加载NavMesh的效果。

Q2:点击应用到游戏画面出现的时间是否与Resource目录的大小有关?

从点击应用到第一次出现应用画面,加载时间主要与两个方面有关:

1、资源文件夹中的资源数量。游戏启动时,Unity引擎会为Resources文件夹中的资源建立一个搜索树,存放其对应的索引unity 异步加载场景,方便后续资源加载。一般来说,Resouces文件夹中的资源越多,构建时间越长,应用启动越慢;

2、第一个场景的资源加载和相关代码的初始化。如果第一个场景资源较多,脚本初始化任务繁重,应用的启动时间会比较慢。

Q3:AssetBundle解压出来的资产在使用过程中会占用一定的内存。我们现在想尝试使用两种加载方式:(1)AssetBundle加载相关资源后,缓存资源,卸载AssetBundle文件;(2)缓存AssetBundle文件,使用相关资源稍后)然后直接加载资源。这两种方法你推荐哪个更好?

对于Unity 5.3版本之前的项目,建议通过LoadFromCacheOrDownload或LoadFromFile加载AssetBundle,既可以减少Assetbundle对象的内存占用,又可以保持AssetBundle之间的链接关系和资源,方便后续加载有依赖的Prefabs。

Unity5.3之后的项目,可以从AssetBundle包本身处理。即:使用 LZ4 格式的 AssetBundle 文件,而不是默认的 LZMA 格式。也可以满足上述要求。稍有不足​​的是,LZ4格式的AssetBundle文件比LZMA格式的文件占用空间稍大。

如果是依赖包,我们还是建议将依赖的共享资源AssetBundle文件缓存在内存中。虽然内存有一定的增加,但上述方法可以大大减少内存使用量,缓解内存使用量。压力。

Q4:如何动态加载Navmesh?

目前Navmesh不支持动态加载,只能随场景加载。因此,可以考虑将带有Navmesh的场景打包成AssetBundle,然后在AssetBundle中使用LoadLevel加载场景。

导航网格的动态加载已经在 Unity 的路线图中。目前Navmesh是和场景绑定的,也就是说只能通过LoadLevel加载场景(不支持>>LoadLevelAdditive的加载方式),自动加载对应的Navmesh数据。替代方案是:将多个“Scene Prefabs”的Navmesh组合到同一个场景中并烘焙(不相互重叠),然后将这些“Scene Prefabs”分离成单独的场景;在运行阶段,Navmesh随着第一个场景的变化,一次性加载,对于其他场景对象,可以通过LoadLevelAdditive加载对应的场景。缺点是场景对象为了对齐Navmesh,在场景制作过程中不能出现坐标重叠,仅供参考。

在Unity5.x下,Lightmap的动态加载需要在烘焙时通过脚本编写每个物体的Lightmapindex和Lightmapscaleoffset,在运行时动态加载后重新设置。因为Lightmapindex和Lightmapscaleoffset信息目前是和场景绑定的,存储在Lightmapsnap.assets中,所以发布的时候也是放在场景信息中的,所以不会记录在Prefab上。

Q5:对于同一个纹理,Prefab 会生成多个实例。这个纹理会有多个副本吗?

这道题需要查看Prefab的具体加载方式。如果只是通过Resources.Load加载,就不会有纹理的多份,但是如果通过AssetBundle加载,每个Prefab都是一个AssetBundle,并且纹理没有打包依赖,那么纹理资源确实会在记忆。有多个副本。如果你发现内存中有多个相同纹理的副本,并且通过 AssetBundle 文件加载资源,建议将 AssetBundle 上传到 UWA 网站()UI界面,其资源检测工具可以帮助开发团队有效地检测和定位 AssetBundle。资源过剩。

四、实例化实例化

Q1:第一次执行GameObject.Instantiate时,有些资源会卡住(当时是加载实例),有些复杂的资源在执行GameObject.Instantiate时甚至会卡住70多毫秒首次。导致明显滞后,有什么好的解决办法吗?

Instantiate 的冻结与三个部分的开销有关:相关资源加载、脚本组件序列化和构造函数执行,大部分原因是相关资源加载引起的。因此,我们的建议如下:

1、通过 Profiler 查看 Instantiate 的具体 CPU 分配情况;

2、如果是资源加载导致的性能瓶颈,一方面简化资源以缓解CPU耗时压力,另一方面通过AssetBundle预加载资源依赖包,也就是这里Instantiate的整体消耗。分时,分摊到前一帧执行(如切换场景等),使Instantiate实例化操作的本地耗时更流畅;

3、如果性能瓶颈是脚本组件的序列化造成的,可以尝试减少脚本中的序列化信息;

4、如果构造函数的执行造成的性能瓶颈只能通过策略来避免,比如降低Instantiate的调用频率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Unity加载优化,你可能会遇到这些问题 的相关文章

  • Unity3D:按键生成物件,Instantia…

    在按下按键之后 可以在画面中生成之前定义好了的物体 这里使用了Instantiate函数来生成 1 先在游戏中定一个空物件GameObject 创建空物件快捷键 ctrl shift n 2 在视图中放置 3 编写脚本 脚本 SpaceCh
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • unity的LOD组件

    本文转载自http blog csdn net huutu article details 52106468 LOD是Level Of Detais 的简称 多细节层次 在游戏场景中 根据摄像机与模型的距离 来决定显示哪一个模型 一般距离近
  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • Unity3d获得android和ios设备的唯一标识

    android为mac地址 ios为advertisingIdentifier 函数都比较简单 网上也搜得到 我也就不多说了 主要是对于我们没做过安卓和IOS开发的人来说 整合进工程有各种的问题 我也就直接上网盘了点击打开链接 代码包里看得
  • NO.6——Unity3D中两种绘制小地图的方法

    在玩游戏时 你经常会发现 在游戏窗口的右上角或者左下角通常会有一个小地图 里边实时反馈角色的移动信息甚至是世界地图 那么这个小地图是如何绘制的呢 我目前掌握了两种方法 一种是以GUI方法重新绘制一个小窗口 另一种是新建一个正交投影的摄像机机
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • Unity3D的四种坐标系

    1 World Space 世界坐标 我们在场景中添加物体 如 Cube 他们都是以世界坐标显示在场景中的 transform position可以获得该位置坐标 2 Screen Space 屏幕坐标 以像素来定义的 以屏幕的左下角为 0
  • Unity3d + NGUI 的多分辨率适配

    移动端的多机型适配 现在要介绍的是 锁链战记 这款游戏的适配方法 这种适配方法是UI是一个基础尺寸 背景是一个基础尺寸 背景比UI多出的部分是一些没有实际作用的部分 这样的适配方式避免了在iPhone5这样的小屏幕上镶边 首先设定UIRoo
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • VS2022 | 显示Unreal Engine日志

    VS2022 显示Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志 视图 gt 其他窗口 gt Unreal Engine日志
  • U3D游戏开发中摇杆的制作(NGUI版)

    在PC端模拟摇杆 实现控制摇杆让玩家或者物体移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine public clas
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接

随机推荐

  • weex-26-dom模块

    D0BE7A90 F94A 4C9A 98D6 1EE3D44C1E5E png 本节学习目标 dom 滚动到指定组件 dom 获取组件的布局信息 我们经常会看到上图所示的需求 当我们将列表向下滑动一段时间后 想要立刻回到顶部 这个时候就要
  • qt中bug总结:遇到C1071:在注释中遇到意外的文件结束

    qt中编译时突然出现这个问题 然后就是编译不过去 百度了好多之后 最后就是在报错的cpp文件中进行查找 找到这个 的注释格式 发现问题就是它导致的 去掉这种注释之后 则发现没问题了
  • 第十三届蓝桥杯省赛JavaA组-试题D-GCD

    题目 代码 import java util Scanner public class lqb13 A组04GCD public static void main String args 希望gcd a k b k 尽可能的大 而k尽可能的
  • 那些从黑马毕业的学生,都去哪工作了?

    我们对这个世界的认知 常常受到身边人的影响 你是否听到过这样的话 房子越来越买不起了 结婚彩礼真的是越来越贵了 找一份不错的工作真是越来越难了 这些看法 让你对生活 对工作产生畏惧 但是 你身边一定也有这样的人 30出头已经买房买车了 刚毕
  • 汽车加油问题【贪心算法】

    1 原版 Problem Description 一辆汽车加满油后可行驶n公里 旅途中有若干个加油站 设计一个有效算法 指出应在哪些加油站停靠加油 使沿途加油次数最少 并证明算法能产生一个最优解 对于给定的n和k个加油站位置 计算最少加油次
  • 计算机房房间要求,数据中心机房的标准规范

    数据中心机房的标准规范 工程中的数据中心机房建设是保证计算机网络设备和各级劳动保障系统正常运转的关键 现在的计算机设备对运行环境要求较高 因此 必须按照一定的标准规范 科学地设计机房 一 机房建设需要执行的标准 主机房建设工程必须遵循国家机
  • Echarts+Python让你的数据可视化(文末有完整源码)

    用一个小例子 一个小程序带你了解pyecharts的基础用法 什么是Echarts Echarts介绍 代码演示 支持自定义主题 使用Echarts 安装pyecharts库 使用pyecharts制作柱形图 Echarts Python制
  • Java static 代码块测试

    Java 中代码执行顺序 类加载 gt 执行引擎 类加载 执行静态代码块 今天成员初始化 执行引擎 执行成员变量初始化 然后构造函数 package basic class Test2 Person2 person new Person2
  • 全局处理Long类型字段返回前端精度丢失

    项目场景 后端返回一个列表数据到前端 其中有部分字段类型后端定义的是Long类型并且是用雪花算法生成的 从响应数据中发现返回的值与数据库的不一致 丢失了精度 问题描述 后端使用MybatisPlus时 主键字段的主键策略用是 TableId
  • ABAP DOI技术中I_OI_SPREADSHEET接口的使用

    前言部分 大家可以关注我的公众号 公众号里的排版更好 阅读更舒适 正文部分 在DOI技术中 I OI SPREADSHEET接口有很多对excel的操作方法 举个例子 CELL FORMAT方法 这个方法里面就有参数ALIGN 可以去覆盖e
  • antd pro(ProLayout) mix混合菜单不生效

    一 问题描述 antd pro的混合菜单模式 算是一种比较新的导航菜单模式 可以让顶部全局导航 侧边导航混合模式同时出现 满足一些特别的需求 ProLayout高级布局组件的API里有一个layout参数 可以设置layout的菜单模式 我
  • nodejs-处理http请求

    文章目录 前言 node 处理 get 请求 node 处理 post 请求 总结 前言 使用nodejs搭建后端代理服务 处理http请求 理解nodejs是如何处理get post请求的 node 处理 get 请求 使用 http 模
  • 时序预测

    时序预测 MATLAB实现SO CNN BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 MATLAB实现SO CNN BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测 预测效果 基本介绍 程序设
  • uniapp实现逆解析地址(经纬度换具体地址)

    调用高德地图的sdk ifndef H5 this qqmapsdk reverseGeocoder get poi 1 poi options address format short policy 1 radius 3000 page
  • 验证网站列表,持续更新中...

    verificationacademy com verificationguide com chipverify com https www runoob com w3cnote verilog2 sdf html https www th
  • Altium Designer常用快捷键

    1 shift s 切换单层显示 2 q 英寸和毫米 尺寸切换 3 D R 进入布线规则设置 其中 Clearance 是设置最小安全线间距 覆铜时候间距 比较常用 4 CTRL 鼠标单击某个线 整个线的NET 网络 呈现高亮状态 5 小键
  • Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP

    一对一音视频通话使用场景 一对一音视频通话都需要稳定 清晰和流畅 以确保良好的用户体验 常用的使用场景如下 社交应用 社交应用是一种常见的使用场景 用户可以通过音视频通话进行面对面的交流 在线教育 老师和学生可以通过音视频通话功能进行实时互
  • vue 封装一个滚动组件和使用自定义指令封装一个滚动触底触发回调指令(纵向滚动瀑布流)

    方式一 滚动组件 纵向滚动触发触底事件和触顶事件
  • 在传统公司干是一种什么体验(八)

    永远不要相信酒桌上说的话 表哥语录 表哥去了新公司之后 经常参加应酬 因为表哥比较实诚 来者不拒 喝酒特别容易喝多 但是表哥有个好处 喝多了不说话 而且第二天能记住昨晚的事 表哥在酒桌上已经收获了999 客户跟表哥的结拜 999 大BOSS
  • 关于Unity加载优化,你可能会遇到这些问题

    关键词 资源加载 卸载 实例化实例化 资源管理方法 一 资源加载 Q1 Shader 是独立打包的 如果我在开始游戏的时候加载一次 以后切换场景时就不用每次加载了吗 确切地说 要实现后续Shader不加载开销 需要满足以下两个条件 1 包含