CreateScriptableObjectAsset

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Description)
(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 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 currently selected project path. It 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 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 than XML, CSV, or other traditional ways of storing such data.

Revision as of 19:11, 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 currently selected project path. It 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 than XML, CSV, or other traditional ways of storing such data.

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