LoginSignup
1
1

More than 5 years have passed since last update.

Unityでコンポーネント拡張時にインスペクターに追加した変数を出力する方法

Last updated at Posted at 2015-11-25

やりたいこと

ボタンがPress状態の時にハイライト画像を上から重ねたい

実装手法

Buttonの子オブジェクトにハイライトオブジェクトを配置し
Press時にアクティブに、離したときに非アクティブにする。

実装プログラム

Buttonを継承する
ハイライトオブジェクトを設定する
各イベントでハイライトのアクティブを切り替える

ButtonHighlight.cs

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class ButtonHighlight : Button
{
    // ハイライトオブジェクト
    public GameObject highlight;

    public override void OnPointerClick(PointerEventData eventData)
    {
        base.OnPointerClick(eventData);
        if (highlight != null && highlight.activeSelf)
            highlight.SetActive(false);
    }

    public override void OnPointerExit(PointerEventData eventData)
    {
        base.OnPointerExit(eventData);
        if (highlight != null && highlight.activeSelf)
            highlight.SetActive(false);
    }
    public override void OnPointerDown(PointerEventData eventData)
    {
        base.OnPointerDown(eventData);
        if (highlight != null && !highlight.activeSelf)
            highlight.SetActive(true);
    }
}

問題点

追加したGameObjectのhighlightの変数がインスペクター上に表示されない
コンポーネントを継承した場合、追加した変数はインスペクター上に表示されないらしい

解決方法

エディタ拡張を使い、強制的に変数を表示させる

Editorディレクトリに以下のスクリプトを入れる

ButtonHighlightEditor.cs

using UnityEngine;
using UnityEditor;
using UnityEditor.UI;

[CustomEditor(typeof(ButtonHighlight))]
public class ButtonHighlightEditor : ButtonEditor {
    public override void OnInspectorGUI()
    {
        var bh= target as ButtonHighlight;
        GUILayout.BeginHorizontal();
        bh.highlight = EditorGUILayout.ObjectField("highlight", bh.highlight, typeof(GameObject), true) as GameObject;
        GUILayout.EndHorizontal();

        base.OnInspectorGUI();
    }
}

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1