You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:43:22