Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在点击游戏对象时创建菜单?(团结)_C#_User Interface_Unity3d_Menu_Mouseover - Fatal编程技术网

C# 如何在点击游戏对象时创建菜单?(团结)

C# 如何在点击游戏对象时创建菜单?(团结),c#,user-interface,unity3d,menu,mouseover,C#,User Interface,Unity3d,Menu,Mouseover,我希望能够将鼠标悬停在游戏对象(代理)上,然后右键或左键单击,创建一个类似于windows右键单击菜单的浮动菜单。我尝试过使用OnGUI()和OnMouseOver()的组合,但是我要么没有得到我需要的行为,要么什么都没有得到。以下是我到目前为止的情况: private void OnMouseOver() { mouseOver = true; mousePos = Input.mousePosition; } private void OnMouseExit() {

我希望能够将鼠标悬停在游戏对象(代理)上,然后右键或左键单击,创建一个类似于windows右键单击菜单的浮动菜单。我尝试过使用OnGUI()和OnMouseOver()的组合,但是我要么没有得到我需要的行为,要么什么都没有得到。以下是我到目前为止的情况:

private void OnMouseOver()
{
    mouseOver = true;
    mousePos = Input.mousePosition;
}

private void OnMouseExit()
{
    mouseOver = false;
}

private void OnGUI()
{

    if (mouseOver && Input.GetMouseButtonDown(0))
    {
        GUI.Box(new Rect(mousePos.x, mousePos.y, 200f, 100f), "this is a test");
    }
}

mouseOver和mousePos初始设置为false

我要做的是在画布中创建所需的菜单,添加动画控制器和动画并将其置于摄影机视图之外(动画将菜单移动到摄影机视图内),最后添加布尔条件触发器以隐藏或显示菜单

然后,我只需在按钮中附加一个单击功能,当有人单击它时触发动画

public class ShowMenu : MonoBehaviour
{

    public Animator ObjectBtnAnimations;

    public void HideObjControls()
    {
        if (ObjectBtnAnimations.GetBool("hide"))
        {
            ObjectBtnAnimations.SetBool("hide", false);
        }
        else
        {
            ObjectBtnAnimations.SetBool("hide", true);
        }
    }
}
Input.GetMouseButtonDown()仅对单个帧执行,因此正在绘制GUI.Box,但仅对单个帧执行


若要修复此输入,可以使用GetMouseButton(),因为只要按下按钮,它就会执行。

是否为要悬停的对象添加了碰撞器?我不知道该输入。GetMouseButtonDown()仅对单个帧执行,因此菜单会出现,但仅对该帧执行。我用Input.GetMouseButton()替换了这个问题,只要按下按钮,它就会执行