在Unity编辑器中创建可编写脚本的对象

Yia*_*mat 3 c# unity-game-engine

因此,显然我很想在大学里听音乐,因为我什至无法解决这个问题,即使使用Google也是如此。。。如何在编辑器中创建可编写脚本的对象?我打开了项目,它看起来像这样:

在此处输入图片说明

单击创建按钮,就好像您要创建文件夹或C#脚本一样。

在此处输入图片说明

从弹出菜单中选择ScriptableObject。

在此处输入图片说明

选择该脚本后,获取此面板并完成该对象的确定。

问题是:我没有ScriptableObject按钮。我有一个脚本,该脚本是可编写脚本的对象(以确保我什至从大学的项目中复制了一个脚本)。我重新启动了Unity,我检查是否安装了任何软件包(没有),并在Google上搜索了很多。但是我似乎无法正常工作...

我必须先安装或添加任何东西吗?提前致谢!

小智 6

我无法发表评论,所以只需将其放置为答案:不要忘记使用UnityEditor.AssetDatabase.GenerateUniqueAssetPath因为简单的AssetDatabase.CreateAsset可以删除您的数据:

using UnityEngine;
using System.Collections;
using UnityEditor;

public class MakeScriptableObject
{
    [MenuItem("Assets/Create/My Scriptable Object")]
    public static void CreateMyAsset()
    {
        MyScriptableObjectClass asset = ScriptableObject.CreateInstance<MyScriptableObjectClass>();

        string name = UnityEditor.AssetDatabase.GenerateUniqueAssetPath("Assets/NewScripableObject.asset");
        AssetDatabase.CreateAsset(asset, name);
        AssetDatabase.SaveAssets();

        EditorUtility.FocusProjectWindow();

        Selection.activeObject = asset;
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您需要另一个脚本来添加按钮,该按钮将根据该可脚本化对象创建一个实例。这样的东西

using UnityEngine;
using System.Collections;
using UnityEditor;

public class MakeScriptableObject {
    [MenuItem("Assets/Create/My Scriptable Object")]
    public static void CreateMyAsset()
    {
        MyScriptableObjectClass asset = ScriptableObject.CreateInstance<MyScriptableObjectClass>();

        AssetDatabase.CreateAsset(asset, "Assets/NewScripableObject.asset");
        AssetDatabase.SaveAssets();

        EditorUtility.FocusProjectWindow();

        Selection.activeObject = asset;
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在统一网站上查看此脚本对象简介教程

  • 通过在类上方添加[CreateAssetMenu()](可以简化上面的代码),可以更快地实现此目的。非常感谢!这让我发疯了...有趣的是,我打开的大学项目既没有CreateAssetMenu也没有上面的代码...我很高兴它现在可以工作了! (3认同)
  • @Yiasmat这并不完全相同,[CreateAssetMenu()]让您没有机会在创建过程中运行自己的代码,例如为SO分配一个唯一的id。 (2认同)