12306网站多钱做的,如何做领券网站,做网站图片用什么格式,网上注册网站要钱吗Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具#xff1a;
面板显示#xff1a;工具包含一个面板#xff0c;用于展示软件的不同版本信息。版本信息#xff1a;面板上显示主版本号、当前版本号和子版本号。版本控制功能…Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具
面板显示工具包含一个面板用于展示软件的不同版本信息。版本信息面板上显示主版本号、当前版本号和子版本号。版本控制功能有一个布尔值选项用于决定是否要升级子版本。打包功能工具支持两种打包方式 APK打包生成的APK包名将包含主版本号和子版本号。Windows打包在打包过程中会将版本信息写入到StreamingAssets目录中的某个文件里。
这个Unity编辑器工具的目的是简化Unity项目的版本管理和打包流程。
使用时要把UnityPackager.cs放在Assets下面的Editor文件夹中 打包路径是工程所在目录中的Builds文件夹
using Newtonsoft.Json;
using System.IO;
using Unity.VisualScripting;
using UnityEditor;
using UnityEngine;public class UnityPackager : EditorWindow // 声明一个名为UnityPackager的编辑器窗口类继承自EditorWindow
{string mainVersion Application.unityVersion;string currentVersion 1; // 当前版本号默认为1string subVersion 0; // 子版本号默认为0bool increaseSubVersion false; // 是否自动增加子版本号默认不增加string apkPath Application.dataPath /../Builds/Apk/;string winPath Application.dataPath /../Builds/Windows/MyGame.exe;string apkName;string filePath;JsonData jsonData;[MenuItem(Tools/Unity Packager)] // 在Unity的菜单栏中添加一个名为Unity Packager的菜单项public static void ShowWindow() // 显示此编辑器窗口的方法{EditorWindow.GetWindow(typeof(UnityPackager)); // 获取UnityPackager窗口实例并显示出来}private void OnEnable(){Init();}void OnGUI() // Unity的图形用户界面方法用于绘制和处理图形用户界面事件{GUILayout.Label(Package Settings, EditorStyles.boldLabel); // 绘制一个加粗的标签显示Package SettingsmainVersion EditorGUILayout.TextField(Main Version, mainVersion);// 绘制一个文本字段用于输入主版本号currentVersion EditorGUILayout.TextField(Current Version, currentVersion); subVersion EditorGUILayout.TextField(Sub Version, subVersion);increaseSubVersion EditorGUILayout.Toggle(Increase Sub Version, increaseSubVersion); // 绘制一个切换按钮用于选择是否自动增加子版本号if (GUILayout.Button(Package APK)) // 绘制一个按钮点击后会打包APK{PackageAPK(); }if (GUILayout.Button(Package Win)) // 绘制一个按钮点击后会打包Windows版本{PackageWin(); }}void PackageAPK() // 打包APK的方法{if (increaseSubVersion) // 如果选择了自动增加子版本号{int subVersionInt int.Parse(subVersion);subVersionInt;subVersion subVersionInt.ToString();}if (jsonData ! null){jsonData.mainVersion mainVersion;jsonData.currentVersion currentVersion;jsonData.subVersion subVersion;}WriteJsonFile(jsonData);apkName MyGame_V mainVersion . subVersion .apk; // 定义APK文件的名称BuildPipeline.BuildPlayer(GetScenePaths(), apkPathapkName, BuildTarget.Android, BuildOptions.None); // 打包APK}void PackageWin() // 打包Windows版本的方法{if (increaseSubVersion) // 如果选择了自动增加子版本号{int subVersionInt int.Parse(subVersion);subVersionInt; subVersion subVersionInt.ToString();}if (jsonData ! null){jsonData.mainVersion mainVersion;jsonData.currentVersion currentVersion;jsonData.subVersion subVersion;} WriteJsonFile(jsonData);BuildPipeline.BuildPlayer(GetScenePaths(), winPath, BuildTarget.StandaloneWindows, BuildOptions.None); // 打包Windows版本}string[] GetScenePaths() // 获取所有场景路径的方法{string[] scenes new string[EditorBuildSettings.scenes.Length];for (int i 0; i scenes.Length; i){scenes[i] EditorBuildSettings.scenes[i].path; // 将场景的路径赋值给字符串数组}return scenes; }//初始化jsonvoid Init(){filePath Application.streamingAssetsPath /version.json;CreateAndWriteJsonFile(mainVersion, currentVersion, subVersion);jsonData ReadJsonFile();}//创建json文件并赋值void CreateAndWriteJsonFile(string data1, string data2, string data3){if (File.Exists(filePath)){return;}// 创建一个包含三个字符串数据的对象var jsonData new{mainVersion data1,currentVersion data2,subVersion data3};// 将对象序列化为JSON字符串string jsonString JsonConvert.SerializeObject(jsonData, Formatting.Indented);// 检查StreamingAssets文件夹是否存在如果不存在则创建if (!Directory.Exists(Application.streamingAssetsPath)){Directory.CreateDirectory(Application.streamingAssetsPath);}// 将JSON字符串写入文件File.WriteAllText(filePath, jsonString);Debug.Log(JSON file created and written successfully at: filePath);}//读jsonJsonData ReadJsonFile(){if (File.Exists(filePath)){// 读取文件内容string jsonString File.ReadAllText(filePath);// 反序列化JSON字符串为对象var jsonData JsonConvert.DeserializeObjectJsonData(jsonString);//读取json数据mainVersion jsonData.mainVersion;currentVersion jsonData.currentVersion;subVersion jsonData.subVersion;return jsonData;}else{Debug.LogError(JSON file not found at: filePath);return null;}}//写入jsonvoid WriteJsonFile(JsonData jsonData){string jsonString JsonConvert.SerializeObject(jsonData, Formatting.Indented);File.WriteAllText(filePath, jsonString);}
}public class JsonData
{public string mainVersion;public string currentVersion;public string subVersion;
}