技术分享连载(十九)-阿里云开发者社区

开发者社区> 云计算> 正文

技术分享连载(十九)

简介:


资源管理

Q1:我项目的UnityShaderCache目录下有300个文件(如下),且不是一次生成, 而是随着游戏进行而产生的。

Application.persistentDataPath/cache/UnityShaderCache

为了在游戏第一次进行时把所有Shader都编译来减少卡顿,我把用到的Shader加入到 Always Included Shaders中, 并在游戏开始时调用了 Shader.WarmupAllShaders,也尝试把Shader打个包一起加载出来 ,然后Shader.WarmupAllShaders,但是效果并不理想。有什么好的解决方案吗?
另一个困惑:已加到 Always Included Shaders 中的。 还需要再加载一次么?

首先 Shader. WarmupAllShaders 并不影响 Shader 的加载,因为该函数的作用是将所有已加载的 Shader 都做一次快速渲染(渲染单个像素,GPU 在首次使用某一个 Shader 时会有额外开销,Warm 相当于是将这部分开销提前)。所以可以通过AssetBundle.LoadAll等接口预加载 AssetBundle 中的 Shader。而对于 Always Included Shaders 中的 Shader 则可以通过 Shader. Find 来预加载。


图形渲染

Q2:某个Shader里设置了Culling Off,会影响到后面所有Shader的渲染状态么(假设后面不再设置Culling)?
UWA Tech Doc

一次 Draw Call 提交所相关的 Render State 是不会影响到下一次的渲染状态的。如果不在 Shader 中显示指定 Cull 模式,则会使用默认的 Cull Back。


资源管理

Q3:StreamingAssetPath 和 PersistantDataPath下可以不Load AssetBundle ,直接放资源Load吗?

这是可以的,但非常有限。因为不通过 AssetBundle 加载,只能通过 Unity 提供的有限的接口来直接加载外部资源,如通过 WWW.audioClip 直接加载 mp3文件,通过 WWW.texture 直接加载 jpg 文件等。由于不是内部资源格式,其加载效率通常较低,jpg 还涉及软解操作非常耗时。因此一般情况下我们都不建议通过这种方式来加载资源。


图形渲染

Q4:项目在发布时,Player Setting中勾选的这个选项,UWA Tech Doc对于已经打包并且放到了Streaming Assets中的AssetBundle文件有效果吗?模型资源里有个UWA Tech Doc选项,是否能达到同样的效果?

理论上 Optimize Mesh Data 是 Build Player 或者 Bundle 时才生效的,所以之前打好的 Bundle 就没效果了。另外,两个选项的效果是不同的,后者是调整面片排序的。


资源管理

Q5:我们的动画是放在FBX文件里的(如下图)
UWA Tech Doc
这样做导致打包的时候把一些无用的文件也打进AssetBundle包里了,实际上我们只想使用最后这个动画文件。但在编辑器里选中FBX文件里的动画文件时却没有AssetLabels这个窗口,设置不了AssetBundle Name。
UWA Tech Doc
是不是只能用代码设置?还是意味着不能设置AssetBundle Name,只能把动画文件提取出来,类似下图这样单独的一个文件?
UWA Tech Doc

在Unity 5.x 的打包机制下确实无法手动为 FBX 下的 Mesh 或 AnimationClip 单独资源设置 AssetBundle Name。因此,如果需要将这部分资源抽出来作为依赖包,目前确实就需要先通过脚本将这部分资源提取出来了。




原文出处:侑虎科技
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章