2

有没有办法在 Unity 编辑器脚本中将 Event.ContextClick 添加到 Gui.Window?

以下是我尝试从OnGUI()和窗口的WindowFunction调用的上下文菜单方法(调用站点在下面表示为“ site: no lucky ”)。除非我直接在主编辑器窗口中单击鼠标右键,否则我无法显示“成功”消息。如果我在我创建的任何 Gui.Windows 中单击鼠标右键,则不会显示 ContextClick 事件。

void OnStateContextMenu(){
    Event evt = Event.current;

    // Ignore anything but contextclicks
    if(evt.type != EventType.ContextClick)return;

    Debug.Log("Success");

    // Add generic menu at context point
    GenericMenu menu = new GenericMenu();
    menu.AddItem (new GUIContent ("AddState"),false,AddState,evt.mousePosition);
    menu.ShowAsContext ();
    evt.Use();
}

和呼叫站点:

void doWindow(int id){
    // OnStateContextMenu(); //site1: no luck
    GUI.DragWindow();
}

void OnGUI(){
    OnStateContextMenu(); //site2: no luck here either
    BeginWindows();
    wndRect = GUI.Window(0,wndRect,doWindow,"StateWnd");   
    EndWindows();
}

更新

作为参考,绿色区域响应右键单击,红色区域不响应。但我想要它。我创建的右键单击菜单具有特定的操作,我只希望鼠标光标在我的一个窗口内单击鼠标右键时可见,即图像中的“你好”。注意:忽略按钮,右键单击在该窗口内的任何地方都不起作用。

在此处输入图像描述

4

1 回答 1

1

这可能不会直接回答您的问题,但应该能够提供帮助

您正在尝试在红色框中实现右键单击功能(如图所示)我有一个类似的问题,但它不是右键单击而是鼠标悬停所以我想这可能会帮助你

string mouseover;  // first of i created a new string

 if (GUI.Button (new Rect (100,100,200,200),new GUIContent("Load game", "MouseOverOnButton0") ,menutexture ))
  {
     //added a mousoveronbutton command to my GUIcontent
      executestuff();
  }

     buttoncheck();       

}
        void buttoncheck()
        {
                mouseover = GUI.tooltip;
                if(mouseover == "MouseOverOnButton0")
                {
                        GUI.Box(new Rect(380,45,235,25),"Not a implemented function as of yet ");

                }

        }

此代码在鼠标击中框的那一刻创建了一个新的 gui 框。

如果您在单独的框中创建了hello ,您可以使用它

if(mouseover == hello)
{
  if(rightclick == true)
  { 
    execute the stuff you want 
  }

} 

或类似的东西。希望这至少会有所帮助

更新

要获得右键单击事件,您必须使用

if(Event.current.button == 1 && Event.current.isMouse)

你必须把它放在 OnGUI 中才能正常工作

这样你首先触发收件箱部分,然后检查右键单击并执行你想要的东西。

于 2013-02-24T19:18:43.003 回答