CreateScriptableObjectAsset

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Description)
Line 4: Line 4:
 
== Description ==
 
== Description ==
 
This is a method to easily create a new instance of a ScriptableObject-derived class as a unique asset in the current path. It mimics the way Unity's built-in assets are created.
 
This is a method to easily create a new instance of a ScriptableObject-derived class as a unique asset in the current path. It mimics the way Unity's built-in assets are created.
 +
 +
You can drag ScriptableObject asset files onto MonoBehaviour public fields, which makes them useful for storing level data or other settings.
  
 
== Usage ==
 
== Usage ==

Revision as of 18:55, 29 July 2011

Author: Brandon Edmark

Contents

Description

This is a method to easily create a new instance of a ScriptableObject-derived class as a unique asset in the current path. It mimics the way Unity's built-in assets are created.

You can drag ScriptableObject asset files onto MonoBehaviour public fields, which makes them useful for storing level data or other settings.

Usage

Copy ScriptableObjectUtility.cs into your project. Then create a class like _____, replacing YourClass with the name of your ScriptableObject-inheriting class, and place it in an Editor folder.

ScriptableObjectUtility.cs

<csharp> using UnityEngine; using UnityEditor; using System.IO;

public static class ScriptableObjectUtility { /// <summary> // This makes it easy to create, name and place unique new ScriptableObject asset files. /// </summary> public static void CreateAsset<T> () where T : ScriptableObject { T asset = ScriptableObject.CreateInstance<T> ();

string path = AssetDatabase.GetAssetPath (Selection.activeObject); if (path == "") { path = "Assets"; } else if (Path.GetExtension (path) != "") { path = path.Replace (Path.GetFileName (AssetDatabase.GetAssetPath (Selection.activeObject)), ""); }

string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath (path + "/New " + typeof(T).ToString() + ".asset");

AssetDatabase.CreateAsset (asset, assetPathAndName);

AssetDatabase.SaveAssets (); EditorUtility.FocusProjectWindow (); Selection.activeObject = asset; } } </csharp>

YourClassAsset.cs

<csharp> using UnityEngine; using UnityEditor;

public class YourClassAsset { [MenuItem("Assets/Create/YourClass")] public static void CreateAsset () { ScriptableObjectUtility.CreateAsset<YourClass> (); } } </csharp>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox