位置: 编程技术 - 正文

Unity3d开发之 多渠道批量打包(四)(unity多开同一个项目的方法)

编辑:rootadmin

推荐整理分享Unity3d开发之 多渠道批量打包(四)(unity多开同一个项目的方法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:unity多pass,unity多选,unity多选,unity多开同一个项目的方法,unity3d dots,unity多场景ui,unity怎么多开,unity多平台,内容如对您有帮助,希望把文章链接给更多的朋友!

原文地址: 。

Unity默认提供了一些预定义标签如:

UNITY_EDITOR : 编辑器模式下。

UNITY_STANDALONE:PC Mac Linux模型下。

UNITY_IPHONE:IOS模式下。

UNITY_ANDROID:ANDROID模式下。

还有很多预定义标签、大家可以在这里看到:

官方提供的标签属于比较大的范围标签,比如我希望在UNITY_ANDROID下面在写一些自定义的标签、类&#; QQ UC CMCC这样的渠道标签该如何呢?如下图所示,ProjectSetting打包界面每个平台都会有Scripting Define Symbols这个选项,可以在这里添加每个平台下对应的自定义标签(多个标签用“;”号隔开),这里我设置的是Android平台,如果IOS也需要打这样的渠道标签那么也要在IOS页面Scripting Define Symbols选项处添加对应的标签。

标签做出来了就好办了,然后在代码中我们可以这样来写。如果在Scripting Define Symbols中没有出现的标签默认是不启用的,就像 #define Test 一样,会自动被注释掉。

然后我们看看如何实现脚本批量打包。

usingUnityEngine;usingUnityEditor;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem;usingSystem.IO; publicclassMyEditorScript { //得到工程中所有场景名称 staticstring[]SCENES=FindEnabledEditorScenes(); //一系列批量build的操作 [MenuItem("Custom/Build Android QQ")] staticvoidPerformAndroidQQBuild() { BulidTarget("QQ","Android"); } [MenuItem("Custom/Build Android UC")] staticvoidPerformAndroidUCBuild() { BulidTarget("UC","Android"); } [MenuItem("Custom/Build Android CMCC")] staticvoidPerformAndroidCMCCBuild() { BulidTarget("CMCC","Android"); } [MenuItem("Custom/Build Android ALL")] staticvoidPerformAndroidALLBuild() { BulidTarget("QQ","Android"); BulidTarget("UC","Android"); BulidTarget("CMCC","Android"); } [MenuItem("Custom/Build iPhone QQ")] staticvoidPerformiPhoneQQBuild() { BulidTarget("QQ","IOS"); } [MenuItem("Custom/Build iPhone QQ")] staticvoidPerformiPhoneUCBuild() { BulidTarget("UC","IOS"); } [MenuItem("Custom/Build iPhone CMCC")] staticvoidPerformiPhoneCMCCBuild() { BulidTarget("CMCC","IOS"); } [MenuItem("Custom/Build iPhone ALL")] staticvoidPerformiPhoneALLBuild() { BulidTarget("QQ","IOS"); BulidTarget("UC","IOS"); BulidTarget("CMCC","IOS"); } //这里封装了一个简单的通用方法。staticvoidBulidTarget(stringname,stringtarget){ stringapp_name=name; stringtarget_dir=Application.dataPath&#;"/TargetAndroid"; stringtarget_name=app_name&#;".apk"; BuildTargetGrouptargetGroup=BuildTargetGroup.Android; BuildTargetbuildTarget=BuildTarget.Android; stringapplicationPath=Application.dataPath.Replace("/Assets",""); if(target=="Android"){target_dir=applicationPath&#;"/TargetAndroid";target_name=app_name&#;".apk"; targetGroup=BuildTargetGroup.Android;}if(target=="IOS"){target_dir=applicationPath&#;"/TargetIOS";target_name=app_name;targetGroup=BuildTargetGroup.iPhone;buildTarget=BuildTarget.iPhone;} //每次build删除之前的残留if(Directory.Exists(target_dir)) { if(File.Exists(target_name)) { File.Delete(target_name); } }else{Directory.CreateDirectory(target_dir);} //==================这里是比较重要的东西=======================switch(name){case"QQ": PlayerSettings.bundleIdentifier="com.game.qq";PlayerSettings.bundleVersion="v0.0.1"; PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup,"QQ"); break;case"UC": PlayerSettings.bundleIdentifier="com.game.uc";PlayerSettings.bundleVersion="v0.0.1"; PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup,"UC"); break;case"CMCC": PlayerSettings.bundleIdentifier="com.game.cmcc";PlayerSettings.bundleVersion="v0.0.1"; PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup,"CMCC"); break;} //==================这里是比较重要的东西======================= //开始Build场景,等待吧~ GenericBuild(SCENES,target_dir&#;"/"&#;target_name,buildTarget,BuildOptions.None); } privatestaticstring[]FindEnabledEditorScenes(){List<string>EditorScenes=newList<string>();foreach(EditorBuildSettingsScenesceneinEditorBuildSettings.scenes){if(!scene.enabled)continue;EditorScenes.Add(scene.path);}returnEditorScenes.ToArray();} staticvoidGenericBuild(string[]scenes,stringtarget_dir,BuildTargetbuild_target,BuildOptionsbuild_options) { EditorUserBuildSettings.SwitchActiveBuildTarget(build_target); stringres=BuildPipeline.BuildPlayer(scenes,target_dir,build_target,build_options); if(res.Length>0){ thrownewException("BuildPlayer failure: "&#;res); } } }

Unity3d开发之 多渠道批量打包(四)(unity多开同一个项目的方法)

这里面忘说了一点,如果我们希望在性能高的手机上用一套好的资源,在性能低的手机上用一套差一点的资源该怎么办?那么首先我们先搞清楚Unity会把什么资源打包,什么资源不打包?

1.Resources文件夹

Resources文件夹是一个只读的文件夹,通过Resources.Load()来读取对象。因为这个文件夹下的所有资源都可以运行时来加载,所以Resources文件夹下的所有东西都会被无条件的打到发布包中。建议这个文件夹下只放Prefab或者一些Object对象,因为Prefab会自动过滤掉对象上不需要的资源。举个例子我把模型文件还有贴图文件都放在了Resources文件夹下,但是我有两张贴图是没有在模型上用的,那么此时这两张没用的贴图也会被打包到发布包中。假如这里我用Prefab,那么Prefab会自动过滤到这两张不被用的贴图,这样发布包就会小一些了。

2.StreamingAssets

StreamingAssets文件夹也是一个只读的文件夹,但是它和Resources有点区别,Resources文件夹下的资源会进行一次压缩,而且也会加密,不使用点特殊办法是拿不到原始资源的。但是StreamingAssets文件夹就不一样了,它下面的所有资源不会被加密,然后是原封不动的打包到发布包中,这样很容易就拿到里面的文件。所以StreamingAssets适合放一些二进制文件,而Resources更适合放一些GameObject和Object文件。StreamingAssets 只能用过www类来读取!!

3. 最后凡是在Hierarchy视图对象引用过的资源文件也会被无条件打包到发布包中。如果有一部分文件可能没有在Resources文件夹下也没有在StreamingAssets文件夹下,也没有被Hierarchy视图游戏对象引用,那么这类资源是不会被打包到发布包中的。

OK!搞清楚这一点就好办了!在处理不同包对应不同资源包的时候,尽量让可配置的资源放在Resources 或StreamingAssets文件夹下,运行的时候程序动态的来读取它们,最后显示在游戏中就可以了。在批量打包前,在Project视图下创建不同包的资源文件夹, 然后脚本 AssetDatabase 动态的将资源拷贝至Resources或StreamingAssets 文件夹中,

[MenuItem("Custom/Build Android QQ")] staticvoidPerformAndroidQQBuild() { //先把资源拷贝到Resources或者StreamingAssetsAssetDatabase.CopyAsset("path","newPath"); //然后开始编译版本 BulidTarget("QQ","Android"); }

代码中说到还有一个重要的东西就是PlayerSettings类。因为在Build的时候不同平台下可能会有一些PlatformSettings是不一样的,所以需要在脚本里面动态的设置它,强大的参数列表在这里:

另外,由于IOS工程比较特殊,使用这样的方法我们只能生成出来多个IOS的工程文件,但是这并不是最终发布的版本。如果想一键生成.ipa文件的话。

1.通过命令行来Build IOS 1生成的xcode工程,最终生成渠道包。

亲测可用!!!!超级方便

【猫猫的Unity Shader之旅】之Unity Shader概述及学习环境搭建 一、什么是ShaderShader君,中文名叫做着色器,本质上它是一段程序,专门用来处理3D图形的渲染过程。这么说大家一定还是不太懂,还是让我们有请Shader

static function FindObjectsOfType (type : Type) : Object[] 转载自:staticfunctionFindObjectsOfType(type:Type):Object[]Description描述ReturnsalistofallactiveloadedobjectsofTypetype.返回Type类型的所有激活的加载的物体列表Itwillreturnnoasse

Unity Vuforia 导出IOS 模拟器从未运行成功。3.0.9插件导出IOS各种报错,不知所云。更新至4.0.妥妥的解决了,真机测试通过。

标签: unity多开同一个项目的方法

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

上一篇:Unity3d 双摇杆 easyTouch(unity2d摇杆)

下一篇:【猫猫的Unity Shader之旅】之Unity Shader概述及学习环境搭建(猫的游戏视频)

  • 个人出租不动产税率
  • 纳税信用等级是专管员评的吗
  • 装卸费发票怎么备注
  • 门禁卡属于什么卡
  • 百旺税控盘汇总表怎么看
  • 独立核算自负盈亏和统负盈亏怎么选
  • 别人退保证金多久能到账
  • 一张发票多个单位报销,怎么分辨
  • 母公司给子公司担保需要决议吗
  • 个体户个人所得税税率表2023计算
  • 公司奖励旅游算休年假吗
  • 发票金额看不清楚可以报销吗
  • 洒水车属于免税车辆吗?
  • 政府收购企业资产规定
  • 单独估价作为固定资产入账的土地为什么不计提折旧
  • 两处拿工资的缴税问题
  • 月销售额3万以下免征
  • win10怎么关闭相机
  • win11开机黑屏进不去桌面
  • 车船使用税进哪个会计科目
  • 出纳能不能兼开专票
  • win11怎么安装CAD2008
  • 同一张发票可以分两次报销吗
  • 苹果mac os 10.4
  • 定额发票收入怎么样确定
  • php快速查找
  • nomoreporn.exe - nomoreporn是什么进程 有什么用
  • 保险多扣一个月
  • 不需要认证的进项税额怎么处理
  • chrome新建标签为打开特定网页
  • php mysql_list_dbs()函数用法示例
  • 不能抵扣的福利发票要勾选吗为什么
  • 公司注册认缴的期限一般是多少
  • 微信小程序下拉菜单怎么做
  • php正则匹配a标签href
  • thinkphp import
  • 可予税前扣除的合理部分
  • java的注解有哪些
  • 劳务派遣公司账务
  • 青苗补偿费归谁所有
  • 一般人转小规模政策文号
  • 供应商发票多开了3毛钱能做到财务费吗
  • js array
  • python中的threading模块
  • mysql使用中遇到的困难和问题
  • 家禽养殖企业
  • 建筑公司计提企税怎么算
  • 以红字冲回
  • 重分类调整的内容包括什么
  • 优惠券会计分录怎么做
  • 赠品视同销售会计分录如何编制?
  • 用货款抵扣供应商成本
  • 查定征收在哪一章
  • 稀释股权违法吗
  • 购买银行理财产品的几个必须知道
  • 到期不续约补偿金怎么算
  • 收不回来的应收账款会计分录
  • 怎么做个体户
  • 银行帐户维护费怎么算
  • 现金日记账与现金流量表的区别
  • 报关单填制的运费怎么算
  • 小规模怎么申请核定征收
  • SQL server不存在或拒绝访问 u8
  • sqlalchemy merge
  • 微软surface pro 3按键驱动
  • 微软推出copilotpro订阅
  • win1020h2正式版
  • mac怎么连接打印机设备
  • 近期win7蓝屏
  • win7电脑无限蓝屏怎么解决
  • [OpenGL ES 04]3D变换实践篇:平移,旋转,缩放
  • python的dict类型
  • Unity3D游戏开发pdf
  • 关于如何用好调查研究推动警务发展
  • 为了防止编码过程的过载现象出现
  • python向csv写入数据
  • JavaScript中的数据类型
  • 对超市的建议和意见怎么写简短
  • 党建服务中心属于哪个区
  • 安徽工作人员出差费用标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设