少々古い話になるが、まぁLTSとか現場によっていろいろなバージョン使っていると思うので参考になればと。
要旨:MacのUnity2017.4.28以前でドラッグのパフォーマンスが気になる場合はアップデートすると良いかも
環境
- OS: macOS Mojave 10.14.5
- Unity: 2017.4.8f1, 2017.4.28f1 (64bit)
検証用コード
using UnityEngine;
using UnityEditor;
public class TestWindow : EditorWindow
{
[MenuItem("Window/TestWindow")]
public static void Open()
{
var window = GetWindow<TestWindow>("Test Window");
window.Show();
}
private void OnGUI()
{
switch (Event.current.type)
{
case EventType.DragUpdated:
case EventType.DragPerform:
case EventType.DragExited:
Debug.Log(Event.current.type.ToString());
break;
case EventType.MouseDrag:
Debug.Log(Event.current.type.ToString());
DragAndDrop.PrepareStartDrag();
DragAndDrop.paths = new[] { "/" };
DragAndDrop.StartDrag("test drag");
Event.current.Use();
break;
}
}
}
変更前の挙動
例えばUnity2017.4.8f1で検証コードのウィンドウの中でドラッグを行うと、以下の2パターンが発生する。
パターン1
-
MouseDrag
イベントがドラッグ中も継続的に発生する - エディタ拡張が非常に軽いコードでも動作がカクつく
パターン2
カーソルを動かしながらドラッグを始めるとこちらのパターンが発生する様だ。
-
MouseDrag
イベントはドラッグ開始時だけ - スムーズにドラッグできる
- ドラッグが終了してからログが出る
変更後の挙動
Unity2017.4.28のリリースノートに
Editor: Fixed Drag and dropping doesn't always work. (1136897)
Editor: Fixed Mouse move events affect Editor UI performance. (973842)
という項目がある。このどちらかによってドラッグの処理が改善されたらしく、一貫して下のような挙動になっている。
-
MouseDrag
がドラッグ中に発生しない - ドラッグはほぼスムーズ
- ログはドラッグ中に出続ける