如何在Unity编辑器脚本中获取选中的ScriptableObject?
在Unity编辑器脚本中获取选中的ScriptableObject实例
你的问题出在ScriptableObject不是挂载在GameObject上的组件,所以用Selection.activeGameObject.GetComponent<DialogueObject>()肯定会返回null——GameObject本身不能挂载ScriptableObject,它是独立的资源文件,存放在Project窗口中。
要通过Selection获取自定义的DialogueObject实例,你需要直接从选中的资源对象里筛选,而不是从游戏对象上取组件。下面是两种可行的写法:
方法1:遍历选中的所有对象筛选类型
DialogueObject selectedDialogue = null; // 遍历所有选中的对象(包括Project窗口里的资源) foreach (var selectedObj in Selection.objects) { if (selectedObj is DialogueObject dialogueObj) { selectedDialogue = dialogueObj; break; // 取第一个匹配的对象 } } if (selectedDialogue != null) { // 在这里执行你的数据填充等自动化操作 Debug.Log($"获取到选中的DialogueObject: {selectedDialogue.name}"); }
方法2:直接判断选中的单个对象类型
如果只需要处理单个选中的对象,可以简化成:
if (Selection.activeObject is DialogueObject dialogueObj) { // 使用dialogueObj进行操作 }
注意事项
- 确保你在Project窗口中选中的是DialogueObject的实例文件(不是Hierarchy里的GameObject),只有这样Selection才会返回对应的ScriptableObject实例。
- 如果同时选中多个对象,方法1会取第一个匹配的DialogueObject,你可以根据需求调整逻辑(比如收集所有匹配的实例)。
内容的提问来源于stack exchange,提问作者Absinthe
相关产品推荐
相关产品推荐

