码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-12-04 16:31:20      阅读:403      评论:0      收藏:0      [点我收藏+]

标签:动画   method   null   应该   icon   .net   awr   tcl   com   

最近用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的编辑器扩展 右键弹出菜单栏

标签:动画   method   null   应该   icon   .net   awr   tcl   com   

原文地址:http://www.cnblogs.com/CJane/p/6130735.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!