公司做網(wǎng)站哪里做南京seo優(yōu)化
Unity - 特殊文件夾【作用與是否會(huì)被打包到build中】
Unity編輯器工具—版本控制與自動(dòng)化打包工具:
- 面板顯示:工具包含一個(gè)面板,用于展示軟件的不同版本信息。
- 版本信息:面板上顯示主版本號(hào)、當(dāng)前版本號(hào)和子版本號(hào)。
- 版本控制功能:有一個(gè)布爾值選項(xiàng),用于決定是否要升級(jí)子版本。
- 打包功能:工具支持兩種打包方式:
- APK打包:生成的APK包名將包含主版本號(hào)和子版本號(hào)。
- Windows打包:在打包過程中,會(huì)將版本信息寫入到StreamingAssets目錄中的某個(gè)文件里。
這個(gè)Unity編輯器工具的目的是簡(jiǎn)化Unity項(xiàng)目的版本管理和打包流程。
使用時(shí)要把UnityPackager.cs
放在Assets下面的Editor文件夾中
打包路徑是工程所在目錄中的Builds文件夾
using Newtonsoft.Json;
using System.IO;
using Unity.VisualScripting;
using UnityEditor;
using UnityEngine;public class UnityPackager : EditorWindow // 聲明一個(gè)名為UnityPackager的編輯器窗口類,繼承自EditorWindow
{string mainVersion = Application.unityVersion;string currentVersion = "1"; // 當(dāng)前版本號(hào),默認(rèn)為"1"string subVersion = "0"; // 子版本號(hào),默認(rèn)為"0"bool increaseSubVersion = false; // 是否自動(dòng)增加子版本號(hào),默認(rèn)不增加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的菜單欄中添加一個(gè)名為Unity Packager的菜單項(xiàng)public static void ShowWindow() // 顯示此編輯器窗口的方法{EditorWindow.GetWindow(typeof(UnityPackager)); // 獲取UnityPackager窗口實(shí)例,并顯示出來(lái)}private void OnEnable(){Init();}void OnGUI() // Unity的圖形用戶界面方法,用于繪制和處理圖形用戶界面事件{GUILayout.Label("Package Settings", EditorStyles.boldLabel); // 繪制一個(gè)加粗的標(biāo)簽,顯示"Package Settings"mainVersion = EditorGUILayout.TextField("Main Version", mainVersion);// 繪制一個(gè)文本字段,用于輸入主版本號(hào)currentVersion = EditorGUILayout.TextField("Current Version", currentVersion); subVersion = EditorGUILayout.TextField("Sub Version", subVersion);increaseSubVersion = EditorGUILayout.Toggle("Increase Sub Version", increaseSubVersion); // 繪制一個(gè)切換按鈕,用于選擇是否自動(dòng)增加子版本號(hào)if (GUILayout.Button("Package APK")) // 繪制一個(gè)按鈕,點(diǎn)擊后會(huì)打包APK{PackageAPK(); }if (GUILayout.Button("Package Win")) // 繪制一個(gè)按鈕,點(diǎn)擊后會(huì)打包Windows版本{PackageWin(); }}void PackageAPK() // 打包APK的方法{if (increaseSubVersion) // 如果選擇了自動(dòng)增加子版本號(hào){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(), apkPath+apkName, BuildTarget.Android, BuildOptions.None); // 打包APK}void PackageWin() // 打包Windows版本的方法{if (increaseSubVersion) // 如果選擇了自動(dòng)增加子版本號(hào){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() // 獲取所有場(chǎng)景路徑的方法{string[] scenes = new string[EditorBuildSettings.scenes.Length];for (int i = 0; i < scenes.Length; i++){scenes[i] = EditorBuildSettings.scenes[i].path; // 將場(chǎng)景的路徑賦值給字符串?dāng)?shù)組}return scenes; }//初始化jsonvoid Init(){filePath = Application.streamingAssetsPath + "/version.json";CreateAndWriteJsonFile(mainVersion, currentVersion, subVersion);jsonData = ReadJsonFile();}//創(chuàng)建json文件并賦值void CreateAndWriteJsonFile(string data1, string data2, string data3){if (File.Exists(filePath)){return;}// 創(chuàng)建一個(gè)包含三個(gè)字符串?dāng)?shù)據(jù)的對(duì)象var jsonData = new{mainVersion = data1,currentVersion = data2,subVersion = data3};// 將對(duì)象序列化為JSON字符串string jsonString = JsonConvert.SerializeObject(jsonData, Formatting.Indented);// 檢查StreamingAssets文件夾是否存在,如果不存在則創(chuàng)建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)){// 讀取文件內(nèi)容string jsonString = File.ReadAllText(filePath);// 反序列化JSON字符串為對(duì)象var jsonData = JsonConvert.DeserializeObject<JsonData>(jsonString);//讀取json數(shù)據(jù)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;
}