小试牛刀
Unity 层级加菜单,恩,这个需求嘛,,,有点必要。那开始吧,先上一张默认鼠标右键的菜单:
有一些复制、粘贴创建游戏物品的方法。
OK,那就加个复制和粘贴坐标、旋转、缩放 的功能吧:、
1.既然是复制粘贴,就要有对象才能复制了。所以需求是:右键物品 -》 弹出菜单。
Event.current 是当前按键 ; Event.current.type == EventType.mouseDown 表示按下;Event.current.button 可以判断按下的是什么键。
2.菜单API:
主要是这个 GenericMenu 类
准备工作完成,开干:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/// <summary> /// 菜单绘制 /// </summary> private static void DrawMenu(GameObject go, Rect selectRect) { ////menu.AddSeparator(""); var e = Event.current; if (e.type == EventType.mouseDown && e.button == 1 && selectRect.Contains(e.mousePosition)) { var menu = new GenericMenu(); menu.AddItem(new GUIContent("Test"), false, Test); menu.ShowAsContext(); } } static void Test() { } |
效果如下:
覆盖了其它的菜单,显示不能接受,重写!
再尝试
另一种添加菜单的方式,方法头上加:
[MenuItem(“path”, false, 3)]
刚才的方法投巧改了一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
/// <summary> /// 当前所选对象 /// </summary> static private GameObject curSelectObj; /// <summary> /// 复制的坐标 /// </summary> static private Vector3 position = Vector3.zero; /// <summary> /// 菜单绘制 /// </summary> private static void DrawMenu(GameObject go, Rect selectRect) { var e = Event.current; if (e.type == EventType.mouseDown && e.button == 1 && selectRect.Contains(e.mousePosition)) { // 设置当前右键选择的对象 curSelectObj = go; } } [MenuItem("GameObject/TransForm/Copy Position", false, 3)] static void CopyPosition() { if (curSelectObj) { position = curSelectObj.transform.position; } } [MenuItem("GameObject/TransForm/Paste Position", false, 3)] static void PausePosition() { if (curSelectObj) { curSelectObj.transform.position = position; } } |
效果图:
又一次做出了比屎还漂亮的设计功能。恩,当练手了,练手。
其它
代码是接着上次写的,有疑问可以去
UnityEditor – Hierarchy 前两篇看看。