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

Unity 显示git分支

最近工作内容比较多,涉及多版本问题处理。但是git的地址是以工程名做的目录(也就是工程名改不了),导致本地同一个git地址的两个unity工程显示一模一样。导致改动的时候经常改错。就想着Unity显示所在的分支就好了。搜了下,网上是有类似的插件,例如GitHub for Unity,https://blog.csdn.net/gitblog_00027/article/details/143911382但是,我也不想因为我这小小的功能就去下一个开发工具包。只能用写代码了。经过deepseek的帮助和自我改动。结果还实现出来了。下面是具体的讲解。

获取git分支呢?

获取git分支,本质上是调用git命令。下面是具体的实现

        private static void UpdateBranchMenu(){// 获取当前项目的根目录string projectRoot = Application.dataPath.Replace("/Assets", "");// 创建进程start信息ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "git"; // 执行的命令startInfo.Arguments = "branch --show-current"; // 命令参数:获取当前分支名startInfo.WorkingDirectory = projectRoot; // 设置工作目录为项目根目录startInfo.RedirectStandardOutput = true; // 重定向标准输出,以便我们读取startInfo.UseShellExecute = false; // 不使用操作系统shellstartInfo.CreateNoWindow = true; // 不创建新窗口// 启动进程Process process = new Process();process.StartInfo = startInfo;process.Start();// 读取命令输出(即分支名称)currentBranch = process.StandardOutput.ReadToEnd().Trim();// 等待进程结束process.WaitForExit();process.Close();}

分支显示到面板中

开始想这是显示到菜单栏里面。但是[MenuItem()]里面的参数不支持动态修改。因此废弃。最后显示到了场景里面。下面是具体的显示效果。

Scene面板显示显示自定义UI

这涉及编辑器代码,不多说直接贴出来

SceneView.duringSceneGui += OnSceneGUI;
 private static void OnSceneGUI(SceneView sceneView){if (overlayStyle == null){// 使用 GUI.skin 中的安全样式if (GUI.skin != null && GUI.skin.button != null){overlayStyle = new GUIStyle(GUI.skin.button);overlayStyle.normal.textColor = Color.white;overlayStyle.alignment = TextAnchor.MiddleCenter;overlayStyle.fontSize = 10;}else{// 备用方案:完全自定义overlayStyle = new GUIStyle();overlayStyle.normal.textColor = Color.white;overlayStyle.alignment = TextAnchor.MiddleCenter;overlayStyle.fontSize = 10;overlayStyle.padding = new RectOffset(6, 6, 3, 3);}}Handles.BeginGUI();if (overlayStyle == null){return;}// 在Scene视图右上角显示分支信息float width = 120;float height = 20;float x = sceneView.position.width - width - 10;float y = 10;Rect branchRect = new Rect(x, y, width, height);// 背景框EditorGUI.DrawRect(branchRect, new Color(0.1f, 0.1f, 0.1f, 0.9f));// 分支文本GUI.Label(branchRect, $"🌿 {currentBranch}", overlayStyle);Handles.EndGUI();}

实时更新

最后且分支的,或者改代码的时候需要监听其状态通过注册EditorApplication类的focusChanged事件和delayCall来实现。另外记得在所在类上标记[InitializeOnLoad]属性用于初始化

        static GitBranchOverlay(){EditorApplication.focusChanged +=OnFocusCalled;EditorApplication.delayCall += UpdateBranchMenu;//EditorApplication.update += UpdateBranchInfo;SceneView.duringSceneGui += OnSceneGUI;}

参考链接

https://blog.csdn.net/gitblog_00027/article/details/143911382

http://www.dtcms.com/a/574669.html

相关文章:

  • 免费做相册视频网站荣县住房和城乡建设厅网站
  • 网站论坛建设需要什么资质可以免费做兼职的网站有哪些
  • 湖北专业网站建设质量保障北京网站制作工具
  • 域名 备案 网站怎么做微信网站
  • wordpress 网站播放器插件wordpress seo联接插件
  • 自己建设网站在哪里建设优秀的商城网站首页设计
  • 推广网站弄哪家好镇江手机网站制作
  • GitCode「开源星期六」第三期回顾:鸿蒙 AI 融合开发的新突破与实践路径
  • 仿站小工具官网互联网有哪些行业
  • 前端学习手机网站开发吗黄页网站建设
  • 网站购物车设计北京工程建设交易中心网站
  • 用dw做网站怎么换行唐山网站建设技术支持
  • 如何自己建网站服务器双wordpress自动同步文章
  • 湖南企业网站制作国外毕业设计网站
  • OpenAI 大模型 API 使用示例
  • 门户 网站开发周期ppt设计网站有哪些
  • 【深度学习新浪潮】Flow Matching使用线性插值,可以不输入时间t作为条件吗?
  • 莲都区建设分局网站网站建设?首选百川互动
  • 云手机畅玩 梦幻西游
  • 电子商务网站怎么备案大学生网站设计作业
  • CodeBuffer与CodeBlob
  • Modbus TCP转Modbus RTU协议转换网关应用案例:消防基地 485 报警器与监控屏秒级通讯配置
  • 纯静态网站怎样丰都网站建设哪家好
  • 电力系统多源异构数据时序对齐与智能融合分析技术
  • 网站建设登记表html网站开发事例教程
  • CTFHub Web进阶-Json Web Token通关3:无签名
  • ARS45开发板原始启动log
  • 高端品牌网站有哪些电话销售如何快速吸引客户
  • Recently I
  • 网站建设保定全屋定制品牌