Unity で Ctrl + D
によるコピーを検出したい場合のやり方です。
といってもカンタンで、 hierarchyWindowItemOnGUI
でヒエラルキーの OnGUI
を受け取ってそこで処理してあげるだけ。
あとは、 delayCall
で処理を遅延させないと activeGameObject
がコピー元のままなので注意。
[InitializeOnLoad] public static class DetectDuplicateEvent { static DetectDuplicateEvent() { EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyWindowItemOnGUI; } private static void OnHierarchyWindowItemOnGUI(int instanceId, Rect selection) { if (Event.current?.commandName == "Duplicate") EditorApplication.delayCall += OnDelayCall; } private static void OnDelayCall() { EditorApplication.delayCall -= OnDelayCall; var go = Selection.activeGameObject; } }
ということで、メモでした。