CreateScriptableObjectAsset

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Usage)
(Description)
Line 3: Line 3:
  
 
== Description ==
 
== Description ==
This is a method to easily create a new instance of a ScriptableObject-derived class as a unique asset in the currently selected project path. It mimics the way Unity's built-in assets are created.
+
This is a method to easily create a new asset file instance of a ScriptableObject-derived class. The asset is uniquely named and placed in the currently selected project path; this mimics the way Unity's built-in assets are created.
  
 
ScriptableObject asset files are useful for storing data that doesn't fit naturally within the MonoBehaviour/GameObject Prefab system. Since they use Unity's built-in serialization, ScriptableObject assets are much easier to work with in Unity than XML, CSV, or other traditional ways of storing such data.
 
ScriptableObject asset files are useful for storing data that doesn't fit naturally within the MonoBehaviour/GameObject Prefab system. Since they use Unity's built-in serialization, ScriptableObject assets are much easier to work with in Unity than XML, CSV, or other traditional ways of storing such data.

Revision as of 06:04, 31 July 2011

Author: Brandon Edmark

Contents

Description

This is a method to easily create a new asset file instance of a ScriptableObject-derived class. The asset is uniquely named and placed in the currently selected project path; this mimics the way Unity's built-in assets are created.

ScriptableObject asset files are useful for storing data that doesn't fit naturally within the MonoBehaviour/GameObject Prefab system. Since they use Unity's built-in serialization, ScriptableObject assets are much easier to work with in Unity than XML, CSV, or other traditional ways of storing such data.

Usage

Copy ScriptableObjectUtility.cs into your project. Then create a class like YourClassAsset.cs, replacing YourClass with the name of your ScriptableObject-inheriting class, and place it in an Editor folder. You will now be able to create a uniquely named YourClass asset file from the Asset menu.

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