Unity编辑器扩展入门——Selection 类
Lesson18-20 - Selection 类
Selection 概述
Selection 类用于在编辑器中获取当前选中的对象,只能在编辑模式下使用。通过 Selection 可以监听用户的选择变化,进而实现更多交互功能。
获取单个对象
获取选中的 Object
1 | Object selectedObj = Selection.activeObject; |
返回当前选中的 Object。如果未选中任何对象返回 null。如果选中了多个对象,返回第一个。
获取选中的 GameObject
1 | GameObject selectedGO = Selection.activeGameObject; |
返回当前选中的 GameObject。仅当选中的是 GameObject 时才有效。
获取选中的 Transform
1 | Transform selectedTransform = Selection.activeTransform; |
返回选中的 Transform。仅限于场景中的对象,项目资源中的预制体无法获取。
获取所有选中对象
获取所有 Object
1 | Object[] objects = Selection.objects; |
返回数组包含所有选中的对象。
获取所有 GameObject
1 | GameObject[] gameObjects = Selection.gameObjects; |
返回所有选中的 GameObject,包括场景对象和预制体。
获取所有 Transform
1 | Transform[] transforms = Selection.transforms; |
返回所有选中对象的 Transform。仅限于场景中的对象。
判断对象是否被选中
Contains 方法
1 | GameObject targetGO = someGameObject; |
判断指定对象是否在当前选择中。
筛选对象
GetFiltered 方法
1 | // 获取 TopLevel 的 GameObject |
从当前选择中筛选出符合条件的对象。
SelectionMode 筛选模式
Unfiltered:不过滤,返回所有选中对象TopLevel:只返回最上层对象,不包含子对象Deep:返回对象及其所有子对象ExcludePrefab:排除预制体Editable:只返回可编辑的对象OnlyUserModifiable:仅返回用户可修改的对象Assets:只返回项目资源文件夹中的对象DeepAssets:返回资源及其子资源(如子文件夹的资源)
混合多个筛选模式
1 | // 获取场景中的最上层 GameObject(不包含预制体) |
使用位或 | 操作符组合多个模式。
监听选择变化
selectionChanged 事件
1 | private void OnEnable() { |
也可以使用 Lambda 表达式:
1 | Selection.selectionChanged += () => { |
注意:监听事件后需要在合适的时机注销,避免内存泄漏。
实战应用
应用示例:实时更新窗口内容
1 | public class MyEditorWindow : EditorWindow { |
应用示例:批量操作选中对象
1 | if (GUILayout.Button("重命名所有选中对象")) { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 游戏开发笔记!
评论
