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

时间: 2024-10-05 22:45:33

Unity3D的编辑器扩展 右键弹出菜单栏的相关文章

vc++ 如何添加右键弹出菜单

一.创建新工程 二.编辑菜单资源 1.添加菜单 按"Ctrl+R",双击"Menu"图标 2.于菜单编辑器内编辑菜单 四.添加代码(红色部分) void CCMenuView::OnUpdateShow(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here MessageBox("右键弹出菜单测试!"); } void CCMenuView::OnRButt

[WPF]DataGrid C#添加右键弹出选择菜单

private void dataGrid_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { ContextMenu context = new ContextMenu(); MenuItem item = new MenuItem(); item.Header = "点击删除该行数据"; item.Click += new RoutedEventHandler(item_Click); context.Item

js+css实现带缓冲效果右键弹出菜单

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

创建右键弹出菜单

①.添加一个菜单资源,ID为IDM_RIGHTMENU.因为在显示右键菜单时顶级菜单是不显示的,所以可以给它设置任意文本. ②.给视类添加WM_RBUTTONDOWN消息,在该消息中处理右键弹出菜单.因为视类窗口始终覆盖在框架窗口之上,框架窗口接收不到鼠标消息,所以由视类捕获WM_RBUTTONDOWN消息. void CMenuView::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CMenu

MFC右键弹出菜单

右键弹出菜单是指右键抬起的时候弹出的菜单.通常放置在Dialog的OnRButtonUp响应函数里. 下面就给出右键弹出菜单的实例: 1 添加右键事件及响应函数 可以用Class Wizard...来添加一个右键消息WM_RBUTTONUP,为其添加Handler,会自动生成OnRButtonUp响应函数 2 为弹出菜单添加资源 可以用"Resource View"中的"String Table"添加一个新的弹出菜单资源,这里假设资源ID : IDC_MENU_UP

SQL Server 2008 R2中,变表的右键弹出菜单中的“选择前1000行”为“选择所有行”

原文:SQL Server 2008 R2中,变表的右键弹出菜单中的"选择前1000行"为"选择所有行" 从SQL Server 2008开始,微软为了提高查询效率等原因,右键点击表时弹出菜单中默认没有"显示所有行",而以"选择前1000行"替代.这有时会为我们带来一些不便. 更改方法是:打开SQL Server Management Studio,依次点击"工具"菜单."选项",展开左

修改右键弹出菜单的字体大小

如果要修改右键弹出菜单的大小. 先设置Screen->MenuFont->Size = 30; 你希望设置的字体大小 然后将 PopMenu的OwnerDraw属性设置为true 然后设置每个菜单项(TMenuItem)的OnMeasureItem 事件过程,设置菜单项的高度. 下面是实例代码 //--------------------------------------------------------------------------- #include <vcl.h>

关于MFC主菜单和右键弹出菜单

一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(void); 弹出菜单在菜单项中是带有右向小三角的菜单,主菜单的每个菜单项都是一个弹出菜单(PopMenu),因此弹出菜单是凸型或左凸型: 创建方式:CMenu::CreatePopMenu(void); 右键菜单是点击右键弹出的菜单(响应OnContextMenu). 原文地址:https://www.

Vue2的右键弹出菜单(vue-contextmenu)

给大家推荐一个基于Vue2的右键弹出菜单插件,支持单一SPA页面以及可以在循环绑定中使用. 项目地址为:https://github.com/chIIC/vue-...demo1: 父组件绑定右键事件的效果: demo2:列表循环绑定,识别当前点击对象: 原文地址:https://www.cnblogs.com/10manongit/p/12219408.html