EditorWindow
で GUIStyle
を利用する際に、フィールドの初期値を入れた状態にすると
Unable to use a named GUIStyle without a current skin. Most likely you need to move your GUIStyle initialization code to OnGUI
とエラーが表示されます
これは名前を指定して GUIStyle
を利用するなら OnGUI
に記述しろというエラーです
※名前を指定せずに自作の GUIStyle
を利用する場合は特に気にする必要はありません
using UnityEditor; using UnityEngine; public class SampleEditorWindow : EditorWindow { private GUIStyle _style = new GUIStyle("label"); private void OnGUI() { EditorGUILayout.LabelField("label", _style); } }
対策1 「null チェックを行う」
OnGUI
で null チェックをすれば初回描画のタイミングで作成してくれます
しかし GUIStyle
が増えてくると管理も面倒になってきます
private GUIStyle _style; private GUIStyle _style2; private void OnGUI() { if (_style == null) _style = new GUIStyle("label"); if (_style2 == null) _style2 = new GUIStyle("box"); EditorGUILayout.LabelField("label", _style); }
対策2 「GUIStyle 用の static クラスを用意する」
Unity 内部の Editor コードにもよく利用されている方法です
個人的にはこちらのほうが分かりやすいのでよく利用します
static なクラスは 初めて呼び出しだあったタイミングで、 作成されるため問題無く名前指定して利用することができます
using UnityEditor; using UnityEngine; public class SampleEditorWindow : EditorWindow { private static class StyleConstant { public static GUIStyle Style; static StyleConstant() { Style = new GUIStyle("label"); } } private void OnGUI() { EditorGUILayout.LabelField("label", StyleConstant.Style); } }