当前位置: 首页 > news >正文

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】

在这里插入图片描述
Unity编辑器工具—版本控制与自动化打包工具:

  1. 面板显示:工具包含一个面板,用于展示软件的不同版本信息。
  2. 版本信息:面板上显示主版本号、当前版本号和子版本号。
  3. 版本控制功能:有一个布尔值选项,用于决定是否要升级子版本。
  4. 打包功能:工具支持两种打包方式:
    • 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"; // 当前版本号,默认为"1"string subVersion = "0"; // 子版本号,默认为"0"bool 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 Settings"mainVersion = 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(), apkPath+apkName, 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.DeserializeObject<JsonData>(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;
}

相关文章:

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具&#xff1a; 面板显示&#xff1a;工具包含一个面板&#xff0c;用于展示软件的不同版本信息。版本信息&#xff1a;面板上显示主版本号、当前版本号和子版本号。版本控制功能…...

amis-editor 注册自定义组件

建议先将amis文档从头到尾&#xff0c;仔细看一遍。 参考&#xff1a;amis - 低代码前端框架 amis 的渲染过程是将 json 转成对应的 React 组件。先通过 json 的 type 找到对应的 Component&#xff0c;然后把其他属性作为 props 传递过去完成渲染。 import * as React from …...

(上位机APP开发)调用华为云命令API接口给设备下发命令

一、功能说明 通过调用华为云IOT提供的命令下发API接口,实现下面界面上相同的功能。调用API接口给设备下发命令。 二、JavaScript代码 function sendUnlockCommand() {var requestUrl = "https://9bcf4cfd30.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/60…...

排序算法系列一:选择排序、插入排序 与 希尔排序

目录 零、说在前面 一、理论部分 1.1&#xff1a;选择排序 1.1.1&#xff1a;算法解读&#xff1a; 1.1.2&#xff1a;时间复杂度 1.1.3&#xff1a;优缺点&#xff1a; 1.1.4&#xff1a;代码&#xff1a; 1.2&#xff1a;插入排序 1.2.1&#xff1a;算法解读&#x…...

【快速排序】| 详解快速排序 力扣912

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;快速排序 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/sort-an-array/ 我们上道题讲过快速排序的核心代码&a…...

游戏推荐: 植物大战僵尸杂交版

下载地址网上一搜就有. 安装就能玩. 2是显血. 4显示植物血, 5是加速. 都是左手主键盘的按钮, 再按是取消. 比较刺激: ps: 设置里面还能打开自动收集阳光和金币....

微调和rag的区别?

微调和RAG&#xff08;Retrieval-Augmented Generation&#xff09;在多个维度上存在显著的区别。以下是它们之间的主要差异&#xff1a; 1. **知识维度**&#xff1a; - RAG对知识的更新时间和经济成本更低。它不需要训练&#xff0c;只需要更新数据库即可。 - RAG对知识的掌控…...

CVPR讲座总结(二)-探索图像生成基础模型的最新进展探索多模态代理的最新进展:从视频理解到可操作代理

引言 在CVPR24上的教程中&#xff0c;微软高级研究员Linjie Li为我们带来了多模态代理的深入探索。这些代理通过整合多模态专家和大语言模型&#xff08;LLM&#xff09;来增强感知、理解和生成能力。本文总结了Linjie Li的讲座内容&#xff0c;重点介绍了多模态记忆、可操作代…...

为什么要禁用透明大页面

在安装CDH&#xff08;Clouderas Distribution Including Apache Hadoop&#xff09;环境时&#xff0c;禁用透明大页面&#xff08;Transparent HugePages&#xff0c;THP&#xff09;是一个推荐的系统优化步骤。以下是禁用透明大页面的一些原因&#xff1a; 1. **性能影响**…...

Element 页面滚动表头置顶

在开发后台管理系统时&#xff0c;表格是最常用的一个组件&#xff0c;为了看数据方便&#xff0c;时常需要固定表头。 如果页面基本只有一个表格区域&#xff0c;我们可以根据屏幕的高度动态的计算出一个值&#xff0c;给表格设定一个固定高度&#xff0c;这样表头就可以固定…...

对于CDA一级考试该咋准备??!

一、了解考试内容和结构 CDA一级考试主要涉及的内容包括&#xff1a;数据分析概述与职业操守、数据结构、数据库基础与数据模型、数据可视化分析与报表制作、Power BI应用、业务数据分析与报告编写等。 CDA Level Ⅰ 认证考试大纲:https://edu.cda.cn/group/4/thread/174335 …...

如何使用PHP和Selenium快速构建自己的网络爬虫系统

近年来&#xff0c;随着互联网的普及&#xff0c;网络爬虫逐渐成为了信息采集的主要手段之一&#xff0c;然而&#xff0c;常规的爬虫技术不稳定、难以维护&#xff0c;市面上的纯web网页爬虫也只能在静态页面上进行操作。而php结合selenium可达到动态爬虫的效果&#xff0c;具…...

intellij idea安装R包ggplot2报错问题求解

1、intellij idea安装R包ggplot2问题 在我上次解决图形显示问题后&#xff0c;发现安装ggplot2包时出现了问题&#xff0c;这在之前高版本中并没有出现问题&#xff0c; install.packages(ggplot2) ERROR: lazy loading failed for package lifecycle * removing C:/Users/V…...

【C++】初识C++(一)

一.什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度 的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(object o…...

【智能算法】目标检测算法

目录 一、目标检测算法分类 二、 常见目标检测算法及matlab代码实现 2.1 R-CNN 2.1.1 定义 2.1.2 matlab代码实现 2.2 Fast R-CNN 2.2.1 定义 2.2.2 matlab代码实现 2.3 Faster R-CNN 2.3.1 定义 2.3.2 matlab代码实现 2.4 YOLO 2.4.1 定义 2.4.2 matlab代码实现…...

python 中 json.load json.loadd json.dump json.dumps 详解

在Python中&#xff0c;json 模块提供了用于处理JSON数据的函数。json.load(), json.loads(), json.dump(), 和 json.dumps() 是这个模块中用于序列化和反序列化JSON数据的主要函数。下面是它们之间的区别详解&#xff1a; json.load() 作用&#xff1a;从一个文件对象&#x…...

【UE 网络】专用服务器和多个客户端加入游戏会话的过程,以及GameMode、PlayerController、Pawn的创建流程

目录 0 引言1 多人游戏会话1.1 Why&#xff1f;为什么要有这个1.2 How&#xff1f;怎么使用&#xff1f; 2 加入游戏会话的流程总结 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;UE虚幻引擎专栏&#x1f4a5; 标题&#xff1a;【UE 网络】在网络…...

磁盘分区工具(fdisk 和 parted)区别及操作笔记

fdisk 和 parted 都是 Linux 系统中用于磁盘分区的工具。 两者主要区别&#xff1a; 支持的分区表类型&#xff1a; fdisk 主要支持 MBR分区表&#xff0c;MBR分区表支持的硬盘单个分区最大容量为2TB&#xff0c;最多可以有4个主分区。parted 支持 MBR分区表 和 GPT分区表&…...

VisualStudio2019受支持的.NET Core

1.VS Studio2019受支持的.NET Core&#xff1f; 适用于 Visual Studio 的 .NET SDK 下载 (microsoft.com) Visual Studio 2019 默认并不直接支持 .NET 6 及以上版本。要使用 .NET 6 或更高版本&#xff0c;你需要在 Visual Studio 2019 中采取额外步骤&#xff0c;比如安装相应…...

Java——IO流(二)-(1/7):字符流-FileReader、FileWriter、字符输出流的注意事项(构造器及常用方法、小结)

目录 文件字符输入流-读字符数据进来 介绍 构造器及常用方法 实例演示 文件字符输出流-写字符数据出去 介绍、构造器及常用方法 实例演示 字符输出流使用时的注意事项 小结 文件字符输入流-读字符数据进来 介绍 FileReader&#xff08;文件字符输入流&#xff09; 作…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...

使用 uv 工具快速部署并管理 vLLM 推理环境

uv&#xff1a;现代 Python 项目管理的高效助手 uv&#xff1a;Rust 驱动的 Python 包管理新时代 在部署大语言模型&#xff08;LLM&#xff09;推理服务时&#xff0c;vLLM 是一个备受关注的方案&#xff0c;具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...

(12)-Fiddler抓包-Fiddler设置IOS手机抓包

1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求&#xff0c;也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求&#xff0c;比如 iPhone、iPad 和 MacBook 等苹…...

RFID推动新能源汽车零部件生产系统管理应用案例

RFID推动新能源汽车零部件生产系统管理应用案例 一、项目背景 新能源汽车零部件场景 在新能源汽车零部件生产领域&#xff0c;电子冷却水泵等关键部件的装配溯源需求日益增长。传统 RFID 溯源方案采用 “网关 RFID 读写头” 模式&#xff0c;存在单点位单独头溯源、网关布线…...