エディタ拡張のカスタムEditorWindowで、
自由な形のRectをクリックする処理のサンプルを書いたのでコードを貼っておきます。
ちょっと自主勉強。
— MIYAKE (@ScreenPocket) March 18, 2021
エディタ拡張パネルの特定領域をクリックする機能。 pic.twitter.com/BwleusJCnG
コード
TouchSampleWindow.cs
using UnityEditor;
using UnityEngine;
namespace ScreenPocket
{
public sealed class TouchSampleWindow : EditorWindow
{
[MenuItem("Tools/ScreenPocket/TouchSample")]
private static void Open()
{
const string title = "TouchSample";
var window = CreateWindow<TouchSampleWindow>();
window.name = title;
window.titleContent = new GUIContent(title);
}
private bool _isClick;
private void OnGUI()
{
var mousePos = Event.current.mousePosition;
//座標表示
EditorGUILayout.LabelField(mousePos.ToString());
var eventType = Event.current.type;
//ボタンの範囲
var buttonRect = new Rect(50f,50f,200f,200f);
//マウスがRectの範囲内
var containsMousePosition = buttonRect.Contains(mousePos);
if (eventType == EventType.MouseDown)
{
_isClick = containsMousePosition;
}
else if (eventType == EventType.MouseUp)
{
_isClick = false;
}
else if (eventType == EventType.MouseDrag)
{
_isClick = containsMousePosition;
}
DrawRect(buttonRect, _isClick);
Repaint();
}
/// <summary>
/// 矩形描画
/// </summary>
/// <param name="rect">矩形</param>
/// <param name="fillCenter">塗りつぶすかどうか</param>
private static void DrawRect(Rect rect, bool fillCenter)
{
Handles.DrawSolidRectangleWithOutline(rect, fillCenter ? Color.red : Color.clear, Color.white);
}
}
}
使い方など
メニュー > Tools > ScreenPocket > TouchSample でパネル表示。
GUILayout.Button()ではないクリック処理を書きたいときに使えるかと。
検索しても自分が欲しい感じの記事が見つけられなかったので、メモとして置いておきます。