最近用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事件,編輯器的很多交互功能都可以實現啦,哈哈哈哈哈哈哈
