Skip to content

Instantly share code, notes, and snippets.

@shinriyo
Forked from tsubaki/ScriptableObjectToAsset.cs
Created September 12, 2015 02:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shinriyo/a250c0b76fa5e2b68ca3 to your computer and use it in GitHub Desktop.
Save shinriyo/a250c0b76fa5e2b68ca3 to your computer and use it in GitHub Desktop.
ScriptableObjectをAssetsファイルとして出力する汎用スクリプト
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
/// <summary>
// ScriptableObjectをプレハブとして出力する汎用スクリプト
/// </summary>
// <remarks>
// 指定したScriptableObjectをプレハブに変換する。
// 1.Editorフォルダ下にScriptableObjectToAsset.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 (selectedObject.name);
AssetDatabase.CreateAsset (obj, path);
labels[2] = selectedObject.name;
// 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 = selectedObject.name;
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))
break;
}
return path;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment