コピペ用
using UnityEditor;
using UnityEngine;
public class EditorTemplate : EditorWindow
{
private Editor _editor;
public /*ScriptableObjectのクラス名*/ sObject;
public /*enumの型*/ eObject;
private Vector2 boxSizeOffset = new Vector2(100, 350);
private Vector2 _scrollPosition = Vector2.zero;
[MenuItem("Hoge/Edit")]
static void Open()
{
var window = GetWindow<EditorTemplate>();
window.titleContent = new GUIContent("/*windowの名前*/");
}
/// <Summary>
/// ウィンドウのパーツを表示する
/// </Summary>
void OnGUI()
{
boxSizeOffset = EditorGUILayout.Vector2Field("windowOffset", boxSizeOffset);
//ScriptableObjectの取得
var guids = UnityEditor.AssetDatabase.FindAssets("t:/*ScriptableObjectのクラス名*/");
if (guids.Length == 0)
{
throw new System.IO.FileNotFoundException("/*ScriptableObjectのクラス名*/ does not found");
}
var path = AssetDatabase.GUIDToAssetPath(guids[0]);
sObject = AssetDatabase.LoadAssetAtPath</*ScriptableObjectのクラス名*/>(path);
//ボタン
if (GUILayout.Button("ボタン"))
{
//ボタンが押されたときの処理
}
//Editorの要素が更新されたかチェックする
if (EditorGUI.EndChangeCheck())
{
if (sObject != null)
{
//要素を更新
_editor = Editor.CreateEditor(sObject);
EditorUtility.SetDirty(sObject);
}
}
//レイアウトを調整
EditorGUILayout.Space();
//ポップアップのGUI
string[] strings = new[] { "Hoge", "Fuga", "Foo" };
index = EditorGUILayout.Popup("ステージセレクト", index, strings);
//enumのポップアップGUI
eObject = (/*enumの型*/)EditorGUILayout.EnumPopup(eObject);
//特定のクラスの要素をEditorWindowで指定する
var hoge = (/*クラス名*/)EditorGUILayout.ObjectField("", /*クラス名*/,
typeof(/*クラス名*/), true);
//Editorの更新
if (_editor != null)
{
//特定のクラスの要素の表示・変更処理
var database = (/*クラス名*/)_editor.target;
//スクロールの開始処理
_scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);
/* EditorではBegin ~ Endに囲まれた範囲のものに処理が適応される
* ここではScrollViewの処理がBegin ~ Endに囲まれたオブジェクトに適応される
*/
//スクロールの終了処理
EditorGUILayout.EndScrollView();
//縦揃え
EditorGUILayout.BeginVertical();
EditorGUILayout.EndVertical();
//横揃え
EditorGUILayout.BeginHorizontal();
EditorGUILayout.EndHorizontal();
//中央揃え
GUILayout.FlexibleSpace();
GUILayout.FlexibleSpace();
//EditorWindowで更新したScriptableObjectを確実に保存する
if (GUILayout.Button("保存", GUILayout.Height(30), GUILayout.Width(60)))
{
// ScriptableObjectのパスは 'Assets/' から始まる相対パス
ScriptableObject obj =
AssetDatabase.LoadAssetAtPath("Assets/Resources//*ScriptableObjectの名前*/.asset", typeof(ScriptableObject)) as
ScriptableObject;
EditorUtility.SetDirty(obj);
AssetDatabase.SaveAssets();
}
}
}
}