Unity中Shader和AssetBundle结合使用的注意事项

1、我们一般把资源和代码作为两个工程。资源工程导出assetbundle供代码工程使用。这么做主要是防止资源过多导致代码工程启动速度慢,影响开发效率。

2、尽量避免使用Resources文件夹。这个文件夹就相当于一个系统默认的AssetBundle。只不过不能增量更新。它会严重影响打包速度。我们把资源从Resources移出来后,打包时间从半个多小时,减少到2~5分钟。

2、Shader都要加入到Proejct Settings--Graphics--Always Included Shaders中。否则代码工程中没有使用到的Shader可能会被裁剪,导致的问题是Shader丢失。

3、Shader要打包到一个AssetBundle中,即Shader需要指定一个AssetBundle包名。如果Shader没有指定的话,那么每个AB包都会包含这个Shader。一方面造成资源浪费。另一方面当Shader被修改的时候,所有的模型都需要重新导出。另外由于我们代码工程里面肯定也维护了一份Shader,模型实际使用的Shader是它自己包内的,不是代码工程的Shader。

      这里要注意,2和3必须都要做。之前我认为加入到Always Included Shaders中,Unity打包ab的时候就不会打包Shader。然而并不是这样。这个列表只负责预先加载Shader。防止资源被裁剪,以及临时加载造成的卡顿。

4、Unity打包后的Shader是平台相关的,Editor下是无法直接使用的。所以Editor下加载AB包中的模型或特效会出现Shader错误。这个时候需要重新指定一下Shader,即遍历所有的Render把Material的Shader重新附下值。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity使用Uber ShaderShader变种管理,可以大大简化游戏开发Shader制作过程,提高游戏渲染效率。 首先,我们需要了解什么是Uber Shader。Uber Shader是一种高度灵活的Shader,它可以处理多种不同类型的表面和效果,例如金属、玻璃、皮肤和草地等。在使用Uber Shader时,我们只需要在Shader选择所需的效果,而不需要编写多个不同的Shader。 接下来,我们需要使用Shader变种管理来控制Shader的不同变种。Shader变种是一种编译后的Shader,它们使用相同的代码和参数,但可以使用不同的预处理指令和条件编译来实现不同的效果。例如,我们可以使用Shader变种来实现不同的光照模型、阴影效果和纹理处理。 在Unity使用Uber ShaderShader变种管理,我们需要首先创建一个Uber Shader,然后在Shader添加Shader变种。我们可以使用Unity提供的ShaderLab语言来编写Shader代码,也可以使用代码编辑器来编写。 在添加Shader变种时,我们需要使用Unity提供的条件编译指令来实现不同的效果。例如,我们可以使用#if指令来控制Shader变种的使用,例如: ``` #if USE_SPECULAR // 添加镜面反射效果 float3 specular = max(dot(reflect(-lightDir, normal), viewDir), 0); col.rgb += specularColor.rgb * pow(specular, specularPower); #endif ``` 最后,我们需要在Unity使用Shader变种管理器来控制Shader使用。我们可以使用Shader变种管理器来选择所需的Shader变种,并为不同的游戏对象设置不同的Shader变种。 总之,使用Uber ShaderShader变种管理可以大大简化游戏开发Shader制作过程,提高游戏渲染效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值