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

Unity自定义Inspector面板之使用多选框模拟单选框

在Unity里面我们可以自己绘制Inspector面板UI,只要继承 Editor 类并重写 OnInspectorGUI 函数即可。EditorGUILayoutGUILayout 两个类为绘制UI组件提供了丰富的API。

[CustomEditor(typeof(MyClass))]
public class MyClassInspector : Editor
{public override void OnInspectorGUI(){DrawDefaultInspector();// custom UI}
}

如果我们想要一个多选一的选项,通常会想到单选框,也就是 radio button,但是在Unity里面,并没有提供绘制 radio button 的接口。最简单的替代方案是使用枚举类型和下拉框来实现多选一的效果。如果实在想要单选框的效果,可以使用开关(Toggle)来模拟。

Toggle 是一种多选框,每个开关都有自己的状态,它和单选框的区别是单选框是公用同一个状态。所以,只要让多个 Toggle 共享同一个状态就可以了。

一开始我用了两个选项,用一个 bool 变量作为状态。

[CustomEditor(typeof(MyClass))]
public class MyClassInspector : Editor
{private bool status;public override void OnInspectorGUI(){DrawDefaultInspector();// custom UIstatus = !EditorGUILayout.ToggleLeft("a", !status);status = EditorGUILayout.ToggleLeft("b", status);}
}

效果如下:
在这里插入图片描述
他们确实只能选中一个,但是有个问题,点击已选中的那个选项会切换到另一个,而且 bool 值最多也只能承载两个选项,如果有超过两个选项,就需要用 int 来记录状态了。

[CustomEditor(typeof(MyClass))]
public class MyClassInspector : Editor
{private int status;public override void OnInspectorGUI(){DrawDefaultInspector();// custom UIif (EditorGUILayout.ToggleLeft("a", status == 0)) status = 0;if (EditorGUILayout.ToggleLeft("b", status == 1)) status = 1;if (EditorGUILayout.ToggleLeft("c", status == 2)) status = 2;}
}

效果如下:
在这里插入图片描述
可以看到还是只能选中一个,而且点击已选中的项也不会取消选中了。对于使用 bool 变量的情况也可以优化为这种方式。

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

相关文章:

  • 前端技术演进录:从 AI 革命到架构新生
  • 【Linux】常用命令 拥有者和权限(四)
  • Python随机选择完全指南:从基础到高级工程实践
  • 安全向量模板类SiVector
  • vue 前端 区域自适应大小
  • AWS申请增加弹性IP配额流程
  • 《Vuejs设计与实现》第 17 章(编译优化)
  • 机器视觉学习-day05-图片颜色识别及颜色替换
  • # 快递单号查询系统:一个现代化的物流跟踪解决方案
  • YOLO12n-Deepsort多目标跟踪之昆虫数据集
  • 【C++标准库】<ios>详解基于流的 I/O
  • 科技赋能生态,智慧守护农林,汇岭生态开启农林产业现代化新篇章
  • C# OpenCVSharp 实现物体尺寸测量方案
  • Whisper JAX:突破性实时语音识别加速框架,性能提升70倍的开源解决方案
  • Spring : IOC / DI (控制反转 / 依赖注入)
  • C/C++---前缀和(Prefix Sum)
  • 【重学MySQL】九十一、MySQL远程登录
  • 理智讨论可以将服务器内存占用限制到80%吗?
  • LeaferJS创建支持缩放、平移的画布,并绘制简单图形
  • 关于git的安装(windows)
  • linux部署overleaf服务器
  • 深度学习(鱼书)day12--卷积神经网络(后四节)
  • 动态规划:硬币兑换(有趣)
  • 嵌入式-定时器的时基单元,自制延迟函数-Day21
  • Python常见设计模式1: 创建型模式
  • 【git】P1 git 分布式管理系统简介
  • linux安装docker compose
  • 企业如何构建全面的高防IP防护体系?
  • 【GPT入门】第60课 openCompose实践图文介绍指南
  • 【GM3568JHF】FPGA+ARM异构开发板 使用指南:USB接口