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

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.xdnf.cn/news/18815.html

相关文章:

  • 测试分类(超详解)
  • vue拖动排序,vue使用 HTML5 的draggable拖放 API实现内容拖并排序,并更新数组数据
  • 基于SpringBoot的社区儿童疫苗接种预约系统设计与实现(代码+数据库+LW)
  • 【高级机器学习】3. Convex Optimisation
  • 无限长直导线周围电场分布的MATLAB
  • 【MATLAB例程】二维平面上的多目标TOA定位,目标和TOA基站的数量、位置可自行设置。附代码下载链接
  • 浅谈Elasticsearch数据写入流程的refresh和flush操作
  • ICDE 2025 | 包含OPTIONAL和UNION表达式的SPARQL查询的高效执行方法
  • 硬件开发_基于物联网的儿童座椅系统
  • 3.【鸿蒙应用开发实战: 从入门到精通】开发入门 Hello World
  • 7、prefix-tuning、P-tuning、Prompt-tuning
  • 基于数据安全的旅游民宿租赁系统
  • 音频时长裁剪工具:高效处理音频,让内容创作更轻松
  • docker 所有常用命令,配上思维导图,加图表显示
  • 配送算法16 A Deep Reinforcement Learning Approach for the Meal Delivery Problem
  • 【Linux】用户与用户组管理
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day14
  • 蓝桥杯算法之基础知识(3)——Python的idle的快捷键设置(idle改键)
  • OpenCV实战1.信用卡数字识别
  • 极简风格PDF格式转换解决方案
  • 人工智能安全地图:将人工智能漏洞与现实世界的影响联系起来
  • Linux 系统核心调优:CPU、磁盘 I/O、网络与内核参数实战
  • Java全栈开发面试实录:从基础到实战的深度探索
  • 【AI算力平台】算力高效调度策略——GPU调度
  • Rust 登堂 之 函数式编程(三)
  • vagrant怎么在宿主机管理虚拟机镜像box(先搁置)
  • PyTorch生成式人工智能——PatchGAN详解与实现
  • LeetCode 438. 找到字符串中所有的字母异位词
  • 功能强大的PDF工具箱-- PDF补丁丁,v1.1.0.4657新版本,免费无广告,开箱即用版~
  • flutter专栏--dart基础知识