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事件,编辑器的很多交互功能都可以实现啦,哈哈哈哈哈哈哈 

posted @ 2016-12-04 14:10  游戏基  阅读(4370)  评论(0编辑  收藏  举报