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