返回介绍

ScriptableObject.CreateInstance 创建实例

发布于 2019-12-18 15:38:31 字数 4528 浏览 1345 评论 0 收藏 0

JavaScript => public static function CreateInstance(className: string): ScriptableObject;
C# => public static ScriptableObject CreateInstance(string className);

Description 描述

Creates an instance of a scriptable object with className.

创建脚本化对象类名为className的一个实例。


JavaScript => public static function CreateInstance(type: Type): ScriptableObject;
C# => public static ScriptableObject CreateInstance(Type type);

Description 描述

Creates an instance of a scriptable object with type.

创建脚本化对象类型为type的一个实例。


JavaScript => public static function CreateInstance(): T;
C# => public static T CreateInstance();

Description 描述

Creates an instance of a scriptable object with T.

创建脚本化对象T的一个实例。

示例:

1.Editor代码:
using UnityEngine;
using System.IO;
using System.Collections;
using UnityEditor;
 
public class Scriptablity : MonoBehaviour {
 
    public static T Create<T> ( string _path, string _name) where T : ScriptableObject {
 
        if ( new DirectoryInfo(_path).Exists == false ) {
            Debug.LogError ( "can't create asset, path not found" );
            return null;
        }
        if ( string.IsNullOrEmpty(_name) ) {
            Debug.LogError ( "can't create asset, the name is empty" );
            return null;
        }
        string assetPath = Path.Combine( _path, _name + ".asset" );
 
        T newT = ScriptableObject.CreateInstance<T>();
        AssetDatabase.CreateAsset(newT, assetPath);
        Selection.activeObject = newT;
        return newT;
    }
 
    public static void  Create<T>() where T : ScriptableObject {
 
        string assetName = "New " + typeof(T).Name;
        string assetPath = "Assets";
        if(Selection.activeObject) {
            assetPath = AssetDatabase.GetAssetPath(Selection.activeObject);
            if (Path.GetExtension(assetPath) != "")
            {
                assetPath = Path.GetDirectoryName(assetPath);
            }
        }
 
        bool doCreate = true;
        string path = Path.Combine( assetPath, assetName + ".asset" );
        FileInfo fileInfo = new FileInfo(path);
        if ( fileInfo.Exists ) {
            doCreate = EditorUtility.DisplayDialog( assetName + " already exists.",
                                                    "Do you want to overwrite the old one?",
                                                    "Yes", "No" );
        }
        if ( doCreate ) {
            T T_info = Create<T> ( assetPath, assetName );
            Selection.activeObject = T_info;
        }
    }
 
    public static void Create() {
 
        Debug.LogError("You should call 'Create' method like this : Create<ExampleData>();");
    }
}
2.创建ScriptableObject脚本。
public class Example : ScriptableObject {
        public int id;
        public string name;
}
3.写个MonoBehavior调用Create方法生成Example格式的数据。
public class ExampleItem: MonoBehaviour {
 
        [MenuItem("Example/Create/Example Data")]
        static void CreatExample() {
 
                Scriptablity.Create<Example>();
        }
 
}
4.在监视面板把Example脚本拖给exampleInfo。
public class ExampleUsage : MonoBehavior {
       public Example exampleInfo;
 
       void Start()
       {
               Debug.Log(exampleInfo.name);
       }
 
}

ScriptableObject

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文