Unity3d 使用Assetbundle合并项目的几点注意
Unity3d中动态资源读取,除了Resources.Load方式。还有就是Assetbundle。
Assetbundle的各方面介绍,这里就不在赘述,网上搜搜就一大片。但是,是不是什么东西都能被打成Assetbundle呢?
基本上,引用到的资源,都能被打成Assetbundle。但是脚本和shader却不一样,虽然脚本和shader也能被导入Assetbundle。但是却不能把源文件导入(如果Assetbundle中存的是脚本的源文件,那也就没那么多热更新解决方案了)。最简单的验证方法,把一个项目的一个场景,导出Assetbundle,另一个项目读取这个Assetbundle运行。会发现资源都导入了,却没有执行的脚本。
因此,如果两个项目,想通过Assetbundle方式,来合并两个项目,那就必须把脚本也拷到要被导入的项目中。两个项目脚本合并,难免出现重名的脚本,重名的类。为了解决这个,每个项目,定一个唯一的namespace。如果项目开始的时候就定好了,那还好办,如果后期合并,前期都没加过。那就只能自己写个Editor脚本,批量加上。
Unity项目中,难免使用一些全局的设置,比如,Physic重力设置,Tag和Layer这些。重力还好办,项目运行起来,还能通过脚本修改。但是Tag,Layer却不行。只能想办法进行合并。
Unity中,Tag只能通过string修改。但是,导成Assetbundle之后,其存储是index。所以要么在合并Tag的时候,要么批量修改,要么写个映射。当然,最好的方式是,项目统一用一套Tag。
Layer相比于Tag要简单许多,Layer可以通过int修改。Unity最大有32个Layer,即使你不添加Layer,也能通过修改Layer的index来使用。那么只要工程中定义全局使用的Layer即可
public class ProjectLayers { public const int Default = 0; public const int TransparentFX = 1; public const int IgnoreRaycast = 2; public const int Water = 4; public const int UI = 5; public const int DefaultAdd = 9; public const int Road = 10; }
gameObject.layer = ProjectLayers.DefaultAdd;
由于项目的资源都是Assetbundle,那么打包的时候,Unity会自动帮你精简项目。所以,Shader和脚本,就有可能被精简掉。
所以保险起见,吧项目中所有的Shader全部添加到
添加项目中使用到的Shader,包括Unity内建的Shader
Unity的脚本也得进行相应的设置
iOS不使用Strip Engine Code
Android也一样
原文地址:https://www.jianshu.com/p/3f93ecc47215
相关推荐
-
Winform客户端内嵌Vue页面 C#
2019-7-24
-
.Net轻松实现支付宝服务窗网页授权并获取用户相关信息 C#
2019-9-2
-
作为开发人员,这四类Code Review方法你都知道吗? C#
2019-4-3
-
如何在.NET Core控制台程序中使用依赖注入 C#
2019-5-5
-
asp.net core IdentityServer4 实现 Client credentials(客户端凭证) C#
2019-10-3
-
实际体验 .NET Standard 2.0 的魅力 C#
2019-5-20
-
IdentityServer4实战 – 谈谈 JWT 的安全策略 C#
2019-4-18
-
Unity 性能优化及一些其他技巧 C#
2019-8-30
-
WPF 客户端浏览器 添加Loading加载进度 C#
2019-6-14
-
【译】Using .NET for Apache Spark to Analyze Log Data C#
2020-6-12