项目进行中,领导要求能够进行一键设置Player settings及自动打包并设置apk的位置,所以自己就上网搜索了很多大神的文章.最后是完成了领导需要的功能,在这里记录并分享一下(此项指针对安卓apk)

1.设置Player settings

参考1.1:https://docs.unity3d.com/ScriptReference/PlayerSettings.html(大家可以去看一下unity提供的API,下面只写一下,我用到的部分)

private static void SetBwPlayerSetting(string bundleIdentifier,string keyStoreName,string keystorePass="123456") {
    PlayerSettings.companyName = COMPANYNAME;
    PlayerSettings.productName = PRODUCTNAME;
    PlayerSettings.applicationIdentifier = bundleIdentifier;// "com.playbyone.chyz.bw";
    PlayerSettings.bundleVersion = BUNDLEVERSION;
    PlayerSettings.Android.bundleVersionCode = BUNDLEVERSIONCODE;

    PlayerSettings.Android.keystoreName = keyStoreName;
    PlayerSettings.keystorePass = keystorePass;
}    

上述代码能够改变图中红色框选的部分

2.更改Plugins-->Android下的sdk,因为,不同的渠道使用不同的sdk文件

参考2.1:https://www.2cto.com/kf/201601/487911.html  (写的非常好的文件夹及文件的操作,我就不贴上自己写的不是太好的代码了,雨松大神下面的参考4.1里面也有文件夹的操作,喜欢的朋友可以自行选择操作)

3.检测Plugins-->Android下的sdk渠道更改完成

参考3.1:http://vr.99.com/news/01102017/002437218.shtml

参考3.2:http://www.ceeger.com/Script/AssetPostprocessor/AssetPostprocessor.OnPostprocessAllAssets.html

(也是参考了上述的文章,帮助很大,并且在参考3.1的基础上完成了自己的需求)

4.检测到文件已是最新的之后,开始执行打包命令

参考4.1:http://www.360doc.com/content/16/0326/11/7014874_545353578.shtml

(照例是看了雨松大神的打包,然后发现shell什么的完全不会,然后截选了里面自己能够使用的代码)

 using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine; public class BwUnityScripsCompiling:AssetPostprocessor { //private static List<string> BuildApk = new List<string>();
private static bool BuildApk = false;
//private static bool BuildFinish = false; public static void StartBuildApk()
{
BuildApk = true;
//BuildFinish = false;
return;
}
/// <summary>
/// 进行update绑定
/// </summary>
static BwUnityScripsCompiling()
{
EditorApplication.update += Update;
}
/// <summary>
/// 检测导入.删除,移动,资源,使用 PlayerPrefs.SetInt进行存储
/// </summary>
/// <param name="importedAssets"></param>
/// <param name="deletedAssets"></param>
/// <param name="movedAssets"></param>
/// <param name="movedFromAssetPaths"></param>
public static void OnPostprocessAllAssets(
String[] importedAssets,
String[] deletedAssets,
String[] movedAssets,
String[] movedFromAssetPaths) {
List<string> importedKeys = new List<string>() { "Assets/Plugins/Android/StoreSDK" };// 可添加文件夹子集
for (int i = ; i < importedAssets.Length; i++) {
for (int j = ; j < importedKeys.Count; j++) {
if (importedAssets[i].Contains(importedKeys[j])) {
PlayerPrefs.SetInt("ImportScripts", );
return;
}
}
}
}
/// <summary>
/// 判断unity编译更新文件是否完成
/// </summary>
private static void Update() {
bool importScripts = Convert.ToBoolean(PlayerPrefs.GetInt("ImportScripts", ));
if (importScripts && !EditorApplication.isCompiling) {
OnUnityScripsCompilingCompleted();
importScripts = false;
PlayerPrefs.SetInt("ImportScripts", );
EditorApplication.update -= Update;
}
}
/// <summary>
/// unity文件编译完成之后,可执行打包动作
/// </summary>
private static void OnUnityScripsCompilingCompleted() {
Debug.Log("Unity Scrips Compiling completed.Start building........");
if (BuildApk == false)
return;
BuildApk = false;
BuildGameBag();
}
/// <summary>
/// 方法一:使用虚拟按键执行打包程序 执行:File-->Buile&Run
/// </summary>
/// <param name="bVk"></param>
/// <param name="bScan"></param>
/// <param name="dwFlags"></param>
/// <param name="dwExtraInfo"></param>
//[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "keybd_event", SetLastError = true)]
//private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
//public static void BuildGameBag()
//{
// const byte VK_CONTROL = 0x11;
// const byte VK_B = 0x42;
// const int KEYEVENTF_DOWN = 0x00;
// const int KEYEVENTF_KEYUP = 0x02; // keybd_event(VK_CONTROL, 0, KEYEVENTF_DOWN, 0);
// keybd_event(VK_B, 0, KEYEVENTF_DOWN, 0);
// keybd_event(VK_B, 0, KEYEVENTF_KEYUP, 0);
// keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
//} //在这里找出你当前工程所有的场景文件,假设你只想把部分的scene文件打包 那么这里可以写你的条件判断 总之返回一个字符串数组。
static string[] GetBuildScenes()
{
List<string> names = new List<string>();
foreach (EditorBuildSettingsScene e in EditorBuildSettings.scenes)
{
if (e == null)
continue;
if (e.enabled)
{
names.Add(e.path);
//Debug.LogError("参与打包场景的路径:" + e.path);
}
}
//Debug.LogError("添加的场景的个数为:" + names.Count);
return names.ToArray();
} /// <summary>
/// 方法二:利用unity3d自带API执行打包程序 执行:File-->Build
/// </summary>
public static void BuildGameBag()
{
//Debug.LogError("测试自动打包Android::BuildForAndroid1()"); PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, "BW");//设置标签,打包的为Android
string path = "C:/Users/Administrator/Desktop/Productvivo11.apk";//Path.GetFullPath(".") + "/Product2.apk"; // Debug.LogError("这是打完之后的包,存放的路径:" + path);
BuildPipeline.BuildPlayer(GetBuildScenes(), path, BuildTarget.Android, BuildOptions.None);//开始进行打包...... // Debug.LogError("测试自动打包Android::BuildForAndroid2()"); } }

5.打包完成之后的检测可进行自己想要的操作

 using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine; public static class BwPostProcess { #if UNITY_EDITOR
[PostProcessBuild()]
public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
{ if (target == BuildTarget.Android)
{
//在里面可以进行自己想要的操作
}
}
#endif
}

暂时告一段落,并且执行无问题

unity3d在菜单栏,一键设置Player setting及自动打包并设置apk的存储位置的更多相关文章

  1. 播放器设置 Player Settings

    原地址:http://game.ceeger.com/Manual/class-PlayerSettings.html#Android Player Settings is where you def ...

  2. 17.1.1.1 Setting the Replication Master Configuration 设置复制的master 配置:

    17.1.1.1 Setting the Replication Master Configuration 设置复制的master 配置: 在一个复制master,你必须启用binary loggin ...

  3. 一键安装 redmine on windows 和发邮件设置

    一键安装 redmine on windows 和发邮件设置 1)使用http://bitnami.org/stack/redmine一键安装redmine (windows). 2)修改下面的文件: ...

  4. Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()

    系列文章目录 第一章:武装飞船 01:创建Pygame窗口以及响应用户输入 02:创建设置类Setting() 一.前期准备 1.语言版本 Python3.9.0 2.编译器 Pycharm2022 ...

  5. cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)

    链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...

  6. 禁止Cnario Player启动后自动开始播放

    Cnario Player安装激活后, 默认开机后自动启动, 启动加载内容完成后进入10秒倒计时, 10秒后即开始播放关机前播放的内容. 如果不想让其自动开始播放, 可按照如下办法设置其不自动播放. ...

  7. webstorm设置修改文件后自动编译并刷新浏览器页面

    转载:http://www.cnblogs.com/ssrsblogs/p/6155747.html 重装了 webstorm ,从10升级到了2016 一升不要紧,打开老项目,开启webpakc-d ...

  8. Spring Boot 应用使用spring session+redis启用分布式session后,如何在配置文件里设置应用的cookiename、session超时时间、redis存储的namespace

    现状 项目在使用Spring Cloud搭建微服务框架,其中分布式session采用spring session+redis 模式 需求 希望可以在配置文件(application.yml)里设置应用 ...

  9. APUE学习之三个特殊位 设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky

    设置用户ID(set-user-ID),设置组ID(set-group-ID),sticky   set-user-ID: SUID      当文件的该位有设置时,表示当该文件被执行时,程序具有文件 ...

随机推荐

  1. Vue实例对象的数据选项

    前面的话 一般地,当模板内容较简单时,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项 data ...

  2. Kaggle竞赛 —— 泰坦尼克号(Titanic)

    完整代码见kaggle kernel 或 NbViewer 比赛页面:https://www.kaggle.com/c/titanic Titanic大概是kaggle上最受欢迎的项目了,有7000多 ...

  3. c++ static用法总结【转载】

    static关键字是C, C++中都存在的关键字.static从字面理解,是“静态的“的 意思,与此相对应的,应该是“动态的“. static的作用主要有以下3个: 1.扩展生存期: 2.限制作用域: ...

  4. nopcommerce的WidgetZones

    来自:http://www.kingreatwill.com Hi, Having just started developing nopCommerce (and having forked out ...

  5. Markdown学习笔记(一) 基本的Markdown标签

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人用它写 ...

  6. Three.js使用局部纹理更新

    THREE.js开发的应用运行在iphone5下发现有些时候会崩溃,跟了几天发现是因为Sprite太多频繁更新纹理占用显存导致的.通常解决纹理频繁更新问题就要用到one draw all方法,放到纹理 ...

  7. APP软件半成品测试技巧

    由于现在产品类型的多样性,产品功能的先进性,更多体现在产品质量的稳定性和可靠性.软件应用的领域不断深入,设计的复杂程度逐步扩大,开发的周期不断缩短,质量的要求就逐渐提高.然而根据我们公司的版本迭代速度 ...

  8. VRTK实现瞬移需要添加的脚本

    进入一个新的公司,boss让实现漫游,但是新公司的Unity版本是5.6,我之前的瞬移插件不好用了,无奈之下找到一个我不熟悉的插件VRTK,但是查了很多资料也没有实现瞬移.经过自己查脚本与实验终于得到 ...

  9. Java 异常框架

    一张图看懂Java 异常框架之间的关系. 说明: 受检异常:编译的时候报错. 费受检异常:运行时报错,需要知道几个常见的异常 NullPointerException(空指针异常) ArrayInde ...

  10. SSH框架通过JFreeChart实现柱状图和获取项目路径

    获取项目路径:String url= ServletActionContext.getRequest().getRealPath("/upload"); 一.直接生成的图片输出到j ...