Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
/// <summary>
// ScriptableObjectをプレハブとして出力する汎用スクリプト
/// </summary>
// <remarks>
// 指定したScriptableObjectをプレハブに変換する。
// 1.Editorフォルダ下にCreateScriptableObjectPrefub.csを配置
// 2.ScriptableObjectのファイルを選択して右クリック→Create ScriptableObjectを選択
// </remarks>
public class ScriptableObjectToAsset
readonly static string[] labels = {"Data", "ScriptableObject", string.Empty};
[MenuItem("Assets/Create ScriptableObject")]
static void Crate ()
foreach (Object selectedObject in Selection.objects) {
// get path
string path = getSavePath (selectedObject);
// create instance
ScriptableObject obj = ScriptableObject.CreateInstance (;
AssetDatabase.CreateAsset (obj, path);
labels[2] =;
// add label
ScriptableObject sobj = AssetDatabase.LoadAssetAtPath (path, typeof(ScriptableObject)) as ScriptableObject;
AssetDatabase.SetLabels (sobj, labels);
EditorUtility.SetDirty (sobj);
static string getSavePath (Object selectedObject)
string objectName =;
string dirPath = Path.GetDirectoryName (AssetDatabase.GetAssetPath (selectedObject));
string path = string.Format ("{0}/{1}.asset", dirPath, objectName);
if (File.Exists (path))
for (int i=1;; i++) {
path = string.Format ("{0}/{1}({2}).asset", dirPath, objectName, i);
if (! File.Exists (path))
return path;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment