Unity3D的编辑器扩展 右键弹出菜单栏

Posted 游戏基

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D的编辑器扩展 右键弹出菜单栏相关的知识,希望对你有一定的参考价值。

最近用U3D的编辑器扩展API来写一个动画帧事件编辑器,其中有不少实用的东西,在这里分享下 微笑

 

现在要是在一个界面上绘制一个小盒子,然后对着鼠标右键点击盒子,可以弹出选择框,代码大概如下:

public void Draw(Rect rect){

//绘制方块

EditorGUI.DrawRect (rect,Color.red);

//判断鼠标右键事件

if (Event.current.type == EventType.ContextClick && rect.Contains (Event.current.mousePosition)) {

GenericMenu menu = new GenericMenu ();

menu.AddItem (new GUIContent ("编辑帧"), false, callmethod1, null);

menu.AddSeparator ("");

menu.AddItem (new GUIContent ("删除帧"), false, callmethod2, null);

menu.ShowAsContext ();

//设置该事件被使用

Event.current.Use ();

}

}

  

效果应该是酱紫的:

 

 

看起来还不错

Event.current这个事件类可以让我们很方面地获取设备输入事件,用起来和Runtime库中的Input类似,非常实用。

 

但这里我遇到一个奇怪的问题,如果我把代码逻辑如下:

public void Draw(Rect rect){

if (Event.current.type == EventType.ContextClick) {

//右键点击逻辑

}

else if(Event.current.type == EventType.MouseDown){

//鼠标点击逻辑

}

}

 

Event.current.type 就再也没有 EventType.ContextClick的类型派发出来了,不知道是不是Unity3D 的一个bug,我用的是Unity3D 5.3.5的版本

 

所以采用如下的方法来判断就完美解决问题啦

public const MOUSE_BUTTON_LEFT = 0

public const MOUSE_BUTTON_RIGHT = 1

public void Draw(Rect rect){

if (Event.current.type == EventType.MouseDown )

if(Event.current.button == MOUSE_BUTTON_LEFT){

//左键点击逻辑

}

else(Event.current.button == MOUSE_BUTTON_RIGHT){

{

//右键点击逻辑

}

}

}

 

有了Event.current事件,编辑器的很多交互功能都可以实现啦,哈哈哈哈哈哈哈 

以上是关于Unity3D的编辑器扩展 右键弹出菜单栏的主要内容,如果未能解决你的问题,请参考以下文章

vue + elementUI 表格右键弹出菜单

怎样在TREEVIEW中的子树上右键弹出菜单?

Java Swing实现具有基本功能的记事本程序

WIN10右键弹出菜单不显示文字或显示不全

我的鼠标右键不弹出菜单了,怎么回事?

鼠标点右键弹出的菜单怎么设置啊?