OnGUIでの描画とイベント処理の順番
「OnGUI、描画とイベント処理の順番が逆だから、ポップアップ表示とか辛すぎ使えない」などと勘違いしていましたがどうやら違うようです。
GUI.depthです。
こんな感じで使います。
public class GUIDepthDemo : MonoBehaviour { // インスペクターで設定 public int layer; public Rect buttonRect; public Rect textureRect; public Texture texture; void OnGUI () { GUI.depth = layer; // 普通のボタン if (GUI.Button (buttonRect, layer.ToString ())) { // イベント処理 } // 自作UIはこんな感じ GUI.DrawTexture (textureRect, texture); if (Event.current.type == EventType.MouseDown && textureRect.Contains (Event.current.mousePosition)) { //他のイベントを抑制 Event.current.Use (); //イベント処理 } } }
・depthが小さいほど前面に表示され、クリック判定も優先される!
・ただし、一つのOnGUIの中でGUI.depthを2回呼ぶと上手く動かない…?
1クラス1depthを守るのが無難です。
(GUI.depthのセッターで、まだ呼ばれていないOnGUIを呼ぶようになってるのかも)
Event.current.Use ();
・自前でクリック判定をする場合はEventをUseすることで、以降のクリック判定を抑制できる。