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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM