Unity3d的Build后处理,和场景build前处理
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using System;
using Object = UnityEngine.Object;// C#中使用该函数首先导入命名空间:
using System.Runtime.InteropServices; // http://blog.csdn.net/bpy/article/details/6886638
public class BuildPostprocessor
{// 然后写API引用部分的代码,放入 class 内部[DllImport("user32.dll", EntryPoint = "FindWindow")]private extern static IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", EntryPoint = "FindWindowEx")] private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); // 获取到该窗口句柄后,可以对该窗口进行操作.比如,关闭该窗口或在该窗口隐藏后,使其显示[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
/*其中ShowWindow(IntPtr hwnd, int nCmdShow);
nCmdShow的含义
0 关闭窗口
1 正常大小显示窗口
2 最小化窗口
3 最大化窗口
使用实例: ShowWindow(myPtr, 0);
*/[DllImport("User32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam); // 你可以使用VS自带的工具spy++ 找出相关控件的下面四个参数const int WM_GETTEXT = 0x000D; const int WM_SETTEXT = 0x000C; // const int WM_CLICK = 0x00F5;const int BM_CLICK = 0xF5; static string lpszParentClass = "#32770"; //整个窗口的类名 这个代表 对话框 , 没有这个使用下一个参数也可以static string lpszParentWindow = "Building Player"; //窗口标题 static string lpszClass_Submit = "Button"; //需要查找的Button的类名 static string lpszName_Submit = "Cancel"; //需要查找的Button的标题 /// <summary>/// Building的 后处理/// todo 需要打开这个所在的路径(文件夹) 这个Unity会自动打开/// </summary>[PostProcessBuildAttribute(1)]public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject){Debug.Log("打包完成 =========================" + pathToBuiltProject);}/// <summary>/// Building场景的 前处理/// OK /// </summary>[PostProcessSceneAttribute(2)]public static void OnPostprocessScene(){//GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);//cube.transform.position = new Vector3(0.0f, 0.5f, 0.0f);var gameEventCenter = Object.FindObjectOfType<GameEventCenter>();if (gameEventCenter){if (!gameEventCenter.TutorialOn){if (EditorUtility.DisplayDialog("确定不开启新手引导么?","你没有开启新手引导", "取消,需要手动", "继续")){Debug.Log("==================================" + "取消打包");IntPtr ParenthWnd = FindWindow(lpszParentClass, lpszParentWindow); if (ParenthWnd != IntPtr.Zero) { Debug.Log("==================================" + "找到窗口");// ShowWindow(ParenthWnd, 0); // 直接销毁这个窗口并没有什么卵用,因为进程还在跑//得到Button这个子窗体,并触发它的Click事件 IntPtr EdithWnd = FindWindowEx(ParenthWnd, new IntPtr(0), lpszClass_Submit, lpszName_Submit); if (!EdithWnd.Equals(IntPtr.Zero)) { Debug.Log("==================================" + "得到了Button");SendMessage(EdithWnd, BM_CLICK, new IntPtr(0), "0"); // SendMessage(EdithWnd, BM_CLICK, EdithWnd, lpszName_Submit); // SendMessage(EdithWnd, BM_CLICK, EdithWnd, lpszName_Submit); } else{Debug.Log("==================================" + "没找到Button");}}}else{Debug.Log("==================================" + "继续打包");}}}}
}
Unity3d的Build后处理,和场景build前处理相关推荐
- 从Ant Build演进Gradle Build:导入Ant Build文件
在大型项目上更改构建系统可能很困难并且需要大量工作. 幸运的是,对于那些将Ant版本迁移到Gradle版本的人,Gradle提供了特别方便的机制来促进这种迁移 . 由于Gradle基于Groovy构建 ...
- Unity3D制作3D虚拟漫游场景(二)
传送门: Unity3D制作3D虚拟漫游场景(一) -------------------------------------------------------------------------- ...
- unity3D海底珊瑚礁、珊瑚岛场景和海底植物岩石素材素材包
unity3D海底珊瑚礁.珊瑚岛场景和素材 详情如下图:(下载链接在文末) 下载链接 https://download.csdn.net/download/weixin_43474701/549722 ...
- build文件下的build.js解释
//bulid.js是webpack的打包文件,通过配置package.json中的script来执行脚本.命令号npm run build即运行node build/build.js 'use st ...
- IDEA build委托到Maven build
首先吐槽一下Intellij IDEA的一个坑 -- IDEA中的maven项目下,可能出现这种情况:代码编辑器中无编译错误,通过maven 的clean .compile.package进行各种操作 ...
- Windows 11 Insider Preview Build 22621.746 和 Build 22623.746 (KB5018490)发布!
今天微软向 Beta 频道发布Windows 11 Insider Preview Build 22621.746 和 Build 22623.746 (KB5018490) .此次更新带来了系统托盘 ...
- Build.VERSION.SDK_INT < Build.VERSION_CODES.O的含义
安卓系统版本的理解 1.VERSION和VERSION_CODES的理解 2.安卓系统版本和安卓api版本关系列表 1.VERSION和VERSION_CODES的理解 VERSION是当前系统版本 ...
- Android Studio调用系统的代码中Build.VERSION.SDK_INT >= Build.VERSION_CODES.xxx
常用来判断sdk版本如下 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //包含新的api的代码块} else { //包含旧的ap ...
- 什么是Build Path?为什么使用Build Path?
什么是Build Path? Build Path是指定Java工程所包含的资源属性集合. 在一个成熟的Java工程中,不仅仅有自己编写的源代码,还需要引用系统运行库(JRE).第三方的功能扩展库.工 ...
最新文章
- Debian rails Puma god 开机启动
- Matlab R2016a中如何完美运行“mex-setup”
- 最长公共子序列(JAVA实现)
- SAP Commerce Cloud ( 电商云 ) 路由路径的自定义配置与开发
- javamail实现邮箱验证功能
- leetcode 删除排序数组中的重复项
- Asp.net mvc中Controller的返回值
- oppo android root工具箱,oppo R11(全网通 安卓8.1)手机完美获取root教程,最强root工具,亲测可用!...
- python做音频格式转换
- Vue.js快速原型开发问题汇总
- 分享新作:休闲小游戏『Flying Stone』
- 骑行318、 2016.7.13
- STM32驱动WS2812B-2020 RGB彩灯(一)
- Ubuntu下为你的Jupyter Notebook配置桌面快捷方式和应用图标
- SQL必知必会第十四节挑战题
- IE8中文正式版下载
- php时间计算,计算本周一或周日,上周一或周日,下周一
- Intel 快速存储蓝屏
- BDD - Specflow Bindings
- 【KEIL MDK使用AStyle程序格式化操作】