あらまし
Hierarchy で GameObject を Duplicate (複製) した際に複製した GameObject の Scale が一致しないことがある
Duplicate した GameObject の WorldScale が1じゃないときに発生しているような気がするが正しい原因は分からない
また複製した GameObject は最後に (1)
が追加され基本的には利用しないので削除する必要がある
実装
Unity の Duplicate のデリゲートがなかったので
EditorApplication.hierarchyWindowItemOnGUI
を利用してGameObject の Duplicate を監視する
EditorApplication.delayCall
を呼び出さない場合
Selection.activeGameObject
がDuplicate 後のGameObject にならないので注意
using UnityEngine; using UnityEditor; public class EditorDuplicateHelper { [InitializeOnLoadMethod] private static void SetDelegate() { EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyWindowItemOnGUI; } private static void OnHierarchyWindowItemOnGUI(int instanceID, Rect rect) { if (Selection.activeInstanceID != instanceID) return; var e = Event.current; if (e.type != EventType.ValidateCommand && e.type != EventType.ExecuteCommand) return; if ("Duplicate" != e.commandName) return; var gameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject; if (gameObject == null) return; var scale = gameObject.transform.localScale; EditorApplication.delayCall += () => { var activeGameObject = Selection.activeGameObject; if (activeGameObject == null) return; activeGameObject.transform.name = name; activeGameObject.transform.localScale = scale; }; } }