トップ > 【Unity】エディター拡張方法をまとめます! > 【Unity】Vector4を1行で表示するエディター拡張を紹介します!
更新日 2022/7/6

【Unity】Vector4を1行で表示するエディター拡張を紹介します!

Unity標準のVector4のインスペクター表示は縦に表示されてしまうため見た目もスペース的にも良くありません。

EditorExtensions_Vector

これを1行で表示できるようにエディター拡張しましょう。

EditorExtensions_Vector4Drawer

カスタム描画するには?

カスタム描画するにはPropertyDrawerを継承してOnGUI関数をオーバーライドします。
PropertyDrawerの詳細は以下を参照して下さい。

void OnGUI(Rect position, SerializedProperty property, GUIContent label)

どのように実装する?

Vector4を1行で描画する方法とSerializedPropertyを使って描画する方法を調べましょう。

Vector4を1行で描画する方法

Vector4を1行で描画するEditorGUI.Vector4Field関数が用意されていますが、
SerializedPropertyを引数に取るオーバーロードはありませんのでさらに調べる必要があります。

SerializedPropertyで描画する方法

Unity内部のソースコードにヒントがあるかもしれないので探しに行きましょう。
ソースコードはUnity公式GitHubで配布されています。
詳しくはUnityのリファレンスコードをゲットしようを参照して下さい。

スライダーを描画するEditorGUI.Slider関数の実装にSerializedPropertyを使った方法を見つけました。

EditorGUI_Slider

大きく分けて3つの構成で実装されています。

  1. BeginProperty関数とEndProperty関数で囲う
  2. BeginChangeCheck関数とEndChangeCheck関数で囲う
  3. GUI描画する

これをマネして実装してみましょう。


Vector4Drawerの実装

PropertyDrawerを継承したVector4Drawerクラスを実装します。

まずCustomPropertyDrawer属性にtypeof(Vector4)を渡してこのクラスがVector4専用であることを示します。 次にPropertyDrawer.OnGUI関数をオーバーライドして先程探したコードをマネして実装します。

EditorGUI.BeginChangeCheck関数とEditorGUI.EndChangeCheck関数で囲うことでエディターの変更を検知できます。変更があった場合に変更された値を代入して更新します。

Vector4Drawer.cs のソースコード

using UnityEngine;

namespace UnityEditor
{
[CustomPropertyDrawer(typeof(Vector4))]
public class Vector4Drawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
label = EditorGUI.BeginProperty(position, label, property);

EditorGUI.BeginChangeCheck();

Vector4 newValue = EditorGUI.Vector4Field(position, label, property.vector4Value);
if (EditorGUI.EndChangeCheck())
{
property.vector4Value = newValue;
}

EditorGUI.EndProperty();
}
}
}

Unityエディター拡張なのでAssets階層以下のEditorフォルダに配置して下さい。

このように簡単に見た目を拡張することができます。
自分の思い通りの見た目になるようにエディター拡張してみてはいかがでしょうか。


関連ページ


Copyright ©2022 - 2024 うにぉらぼ