位置: 编程技术 - 正文

Unity自动打包工具(unity打包package)

编辑:rootadmin

推荐整理分享Unity自动打包工具(unity打包package),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity打包package,unity自动打包工具,unity自动化打包,unity自动化打包,unity打包package,unity打包package,unity打包机,unity自动打包工具,内容如对您有帮助,希望把文章链接给更多的朋友!

原文链接: Store、WP8商店、、、小米等。

上海火溶网络CEO王伟峰分享的《啪啪三国》打包工具

过程

从过程上,主要分为以下几步:

1. 资源准备;

2. 由Unity生成工程;

3. 生成安装包;

4. 资源恢复。

具体到平台和渠道,会有一些细微差异,下面具体说。

WP8打包

这个是第一个写的,因为不涉及渠道,相对来说最简单。从下午4点,写到晚上9点多,时间大部分花在处理一些细节上。

第一步,资源相关的准备。我们是做了动态更新的,所以生成工程之前,要先从Unity里删去更新的资源,这样打出的包更小。ps:其实这一步之前,我们会先打更新包,关于资源打包与更新,我另写一篇文章介绍。另外,跟各个平台交互,我们写了插件,比如,内嵌web功能,Unity是没有的,要调用系统的api来做。就是这么一个再普通不过的插件,让我花了大量时间处理,因为Unity常常load别的平台目录下的插件。比如,我有一个插件Platform.dll,按照Unity的官方文档,应该放到“Plugins/平台/”目录下,生成WP8工程的时候,Unity应该选择Plugins/WP8/Platform.dll加载;打android包的时候,应该加载Plugins/Android/Platform.dll。但是遗憾的是,Unity不是这样,我打WP8的时候,它常常去加载Android目录下的插件。这个问题的原因,我一直没有查到,希望了解的朋友不吝赐教。为了解决这个问题,我就在打包的时候,把非当前平台目录下的插件删除,打好包之后,再恢复。另外,还要删除上一次打包生成的文件。

第二步,生成工程。这个没什么好说的,就是Unity的API调用,比如,BuildPipeline.BuildPlayer(BuildScenes, BuildPath, BuildTarget.WP8Player, BuildOptions.None);

第三步,生成安装包。在生成包之前,要替换一些Unity生成的文件,比如,MainPage.xaml/.cs,因为我们为了操作内嵌web,做了WP8特性的ApplicationBar;我们配置好的WMAppManifest.xml,友盟统计要求初始化必须在App.xaml.cs中,WP8工程Assets/目录下的Icon等。然后,根据需要修改工程文件,比如,我们做了WP8的ApplicationBar,需要在打包工具里把相关的资源索引添加到工程文件中。然后,就可以调用cmd来生成apk安装包了。cmd主要是调用vs的命令,生成apk,调用vs安装目录下的devenv.exe,配置一下devenv.exe的参数就可以了。这里有一个需要注意的地方是,Build选项要选择Master,而不是Release,Release版本有"profiler support",Master才是发布用的。

第四步,资源恢复。包已经打好了,为了接下来打别的平台或渠道的包,恢复资源。比如,恢复更新的资源、各平台插件等。

Android打包

Android打包麻烦一些,不是因为渠道多,而是因为有的渠道有一些特殊需求。过程类&#;,下面主要说不同的地方。

第一步,资源相关的准备。跟WP8打包不同的是,Android是多渠道,要处理各个渠道的资源。我最开始把所有渠道sdk相关的资源和代码,都放到Unity的Plugins/目录下面,比如Plugins/Android、Plugins/Android、Plugins/AndroidXiaoMi等,每次打包的时候,资源准备阶段先删除所有非当前渠道相关的内容,然后把当前渠道的目录名修改为Plugins/Android,打完包再删除Plugins/Android,然后调用svn update更新所有删除的内容。写完之后,打一个包,ok。当时接了个渠道,然后我点了一下“Build All”,Build过程很慢,因为有大量的散文件,svn update要几分钟,Unity import进来这些资源也要一些时间。而且,当打到第四、第五个包的时候,Unity import资源的时候,常常会报错,可能是因为磁盘上的文件与Unity的缓存文件之间同步的时候异常。这样打包太慢了,也无法做到一键打几十个包。后来,我想到把所有渠道文件放到Unity Assets目录外,这样,需要哪个sdk就copy进来哪个,打完包delete就可以了,不用svn update,也不需要Unity每次import大量的散文件。打包效率提高了几倍,而且,一键出十几个包,也没有遇到过Unity报错。

第二步,生成工程。这个地方,我是走了一些弯路的。

最开始,我没有生成Android工程,而是直接Build出来apk,这样的好处是快。根据测试,3分钟多可以生成一个,而生成工程之后再Build出apk,时间翻了一倍。但是,各个渠道的sdk的特殊性,造成这种方式后来出几次问题。

第一次,接sdk的同学说,有的渠道要求独立的icon或splash,我想这个简单,用aapt直接操作生成apk,修改里面的内容,然后重新签名就可以了,非常快,又方便。

第二次,接百度多酷的同学说,用打包工具生成的apk,充&#;支付的时候,如果选择银联支付,会crash。而先Build出工程,然后用Eclipse编工程生成的apk没问题。我仔细对比了两个apk,发现直接生成的apk里,比工程生成的apk里,res/drawable/目录下少了几个文件,data.bin/data_high.bin/data_low.bin/mobilepayplugin.bin,我怀疑是Unity直接生成apk的时候,过滤掉了这些文件,而生成工程的时候没有过滤。什么原因?这个也好解决,找到缺少的文件,用aapt加进去。后来,当乐、Oppo都需要在打包工具里加入同样的几个bin文件。

这样解决,不是好方法,但是解决了问题。但是,后来Oppo的同学反馈说,我们的包打开的Oppo登录界面是全屏的,而实际应该是弹出窗口样式。这说明,打包的时候,可能有些界面布局文件,没有打进去。但是,这次,我没法通过对比两种方式生成的apk,找缺少哪个文件了,因为所有的资源文件,都打到resources.arsc里面了。这时,我觉得这种出现问题解决问题的思路是不对的,应该从根本上拒绝出问题。然后,我重新写了Android打包工具,先生成工程,然后用Ant Build出apk。如果哪个渠道有特殊需求,在build apk之前操作工程,比如替换icon、splash。当然,这样做打包过程变成了,慢了一半。

Unity自动打包工具(unity打包package)

第三步,生成安装包。这个没什么好说的,就是Ant、sign、zipalign等。另外,我们的运营有一个特殊的需求,他们投放渠道,分两种方式:一种是接渠道sdk,另外一种是只购买流量,不接sdk。针对第二种方式,我打包的时候,只打一个包,然后,为了统计区分投放的渠道,对于生成的这个包,复制一份然后修改包里的配置文件,就可以了,不需要重复生成多次包。这样,十几秒就可以出一个包。我打包工具里的“SPP渠道包”这个按钮,就是是单独生成这种渠道包的。

第四步,资源恢复。因为WP8就一个渠道,所以打完WP8包,就要直接恢复所有资源。而Android渠道众多,为了更快,有些资源是不需要恢复的,比如我们更新的内容。只需要打完所有Android包之后,恢复一次就可以了。

iOS打包

写完WP8和Android打包工具后,我不想再做重复的工作了,就写了一份详细的文档,然后交给一个小伙伴,让他参考WP8和Android的代码,写iOS的打包工具,也是想让他锻炼、学习一下。结果,悲剧无比!!!因为代码是很类&#;的,而且我给他详细讲了怎么做,iOS也只有3个渠道,他需要写的代码不超过行,shell脚本估计在行以内。这个我本来预估1-2天,最多3天可以做完的工作,他要了一周。而最后,他做了一月有余%>_<%

后来,我发现一个第三方工具,XUPorter,可以方便的编辑framework、plist甚至obj-c代码,有了它写iOS打包更方便了。

其它

我最开始写工具的时候,打包操作入口用的是[MenuItem(...)],操作按钮在Unity左上的菜单栏,做出来的打包工具操作界面是这样的:

我不知道大家有没有发现有什么问题。问题就是:每次加渠道,我都要在代码里添加菜单项,比如,今天添加渠道,在代码里添加:

[MenuItem("Build/Build Android Player/")] static void BuildAndroidPlayer() {

// do something ...

}

明天添加了渠道:

[MenuItem("Build/Build Android Player/")]

static void BuildAndroidPlayer() {

// do something ...

}

如果有几十个,甚至一两百个渠道怎么办?每次都修改代码?NO!ps:我们公司有一款产品真的接了一百多个渠道。

但是,在函数之外,如何读配置对C#的属性[MenuItem(...)]做赋&#;处理?我还抱着一点侥幸查了一些资料,这是根本不可能的。后来,我想起来之前看到的王伟峰分享那张图:

这张图虽然很模糊,但是我仔细看看,看出来他们的打包工具操作入口,不是在Unity 顶部的菜单栏,而是在Inspector中。了解了在哪里写,实现就很简单了,建一个Prefab就可以了。这样,以后新添加渠道,接入的同学只需要按照我规定的&#;式,在配置文件里加一行渠道信息就可以了。修改后打包工具操作界面:

我们的打包工具操作入口

Refresh按钮是修改渠道配置文件之后,重新读取配置文件。

Build Patch下面的几个按钮是打各平台的更新包。

Build Player下面按钮式打各平台、各渠道的安装包。可以一键出某个包,或者一键出某平台的所有包。这里没有做一键出所有平台的包,是因为我们没有这个需求。如果要做,出完一个平台的包之后,切换一下平台就可以了,接口是EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTarget.XXX)。但是,注意不要Switch之后立即打新平台的包,而应该在回调接口里做,activeBuildTargetChanged。

Unity 3D中的射线(上) 在我们的游戏开发过程中,有一个很重要的工作就是进行碰撞检测。例如在射击游戏中子弹是否击中敌人,在RPG游戏中是否捡到装备等等。在进行碰撞

Unity3D网络游戏开发之<每天学一点><一> 任何一款unity网络游戏开发,必须要实现的功能:1.资源打包(Assetbundle)(不放进项目代码里面,本地使用)由于目前Assetbundle已被disunity破解,正式运营的话

Unity3d 游戏资源打包加密(图片/XML/TXT等) C#编码 (一) 本文只是讲述一下过程,采用很简单的打包加密方法,至于需要什么样的加密结果,请大家按照需求去修改,字节偏移、前后颠倒加算法都可以,不过

标签: unity打包package

本文链接地址:https://www.jiuchutong.com/biancheng/375779.html 转载请保留说明!

上一篇:unity项目之一飞机自由分行和发射子弹(unity flybird)

下一篇:Unity 3D中的射线(上)(unity创建射线)

  • 个税申报的收入扣除社保吗
  • 工程会计税率
  • 对本次疫情有什么看法
  • 出口退免税的退税办法为
  • 购进货物的发票是外来凭证吗
  • 视同销售的销售额如何确定
  • 报税利润表的第二季度本期金额本年累计金额是什么
  • 股东投入款放入什么科目
  • 现金清查时,发现长款200元,未查明原因,经批准后转销
  • 房地产企业预缴增值税如何申报
  • 福利费的支出要求及标准
  • 长期借款账务处理会计分录例题
  • 没有销售收入可以有销售费用吗
  • 可转换债券转股时股价高于转换价格
  • 矿泉水资源税计税依据
  • 商业企业库存商品和销售对不上
  • 重复缴税怎么做账
  • 上月工资多计提了怎么调整
  • 固定资产进项发票怎么开
  • 小规模企业增值税税率
  • 可供出售金融资产属于流动资产吗
  • 支票存根没有进账怎么办
  • 未达起征点销售额怎么填申报表
  • 当月开发票收到货款会计应该以什么为做账凭证?
  • 鸿蒙系统控制中心
  • 如何设置电源键关闭屏幕
  • 企业帐薄包括哪些
  • 公司租用员工的车租车协议
  • 研发费用没有发票可以加计扣除吗
  • PHP:oci_set_action()的用法_Oracle函数
  • 营业外收入账户贷方登记企业发生的各项营业外收入
  • ds file是干什么的
  • php入门例子
  • php getdate
  • 微信小程序分成比例
  • 金融资产的条件
  • 旺阿雷自然保护区里的旺阿雷瀑布,新西兰北岛 (© Nathan Kavumbura/Getty Images)
  • 前端的基本知识
  • 一文讲清资产负债表中各个项目的来龙去脉
  • laravel创建model
  • web自动化selenium实战项目
  • vue3项目中使用el-dialog
  • 出口退税管理类别四类
  • 个税各项减扣标准金额
  • 进项发票和销项发票金额相同还需要交税金吗
  • 工程运维预缴增值税税率
  • c语言中如何防止函数重名
  • 建安企业确认收入的依据
  • 营销策划协议
  • 个税申报错了并撤销
  • 入伙退伙协议要盖章吗
  • 必要报酬率和期望报酬率谁大更好
  • 期间费用逐年上升说明什么
  • 未开票收入转为开票收入
  • 为取得交易性金融资产支付的手续费
  • 厂房和设备折旧计入什么费用
  • 二类银行卡是什么卡
  • 限额领料单属于什么凭证多选题
  • 旅游饮食服务企业会计核算的特点
  • sql server删除重复数据保留一条
  • 卡巴斯基2019
  • linux中的ls命令的功能是变换工作目录到目标指定目录
  • jinjia.exe进程
  • xp开机提示explorer
  • win7如何访问xp
  • 怎么查看macbook air序列号
  • rteng7.exe - rteng7是什么进程 有什么用
  • mmtray2k.exe有什么作用 是什么进程 mmtray2k进程查询
  • cocos creatorapi
  • es6 文档
  • css样式表实验心得
  • python 很简单
  • python多线程操作
  • JavaScript基础教程
  • javascript的对象
  • 浙江税务客服咨询电话
  • 上海《居住登记凭证》
  • 12366属于哪个部门
  • 代理记账和代理的区别
  • 12366几点上班人工服务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设