如何在点击游戏对象时创建菜单?(Unity)

4

我希望能够在悬停在游戏对象(代理)上时,通过右键或左键单击创建一个类似于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。


你是否已经给你想要悬停的物体添加了碰撞器? - Doh09
2
我不知道Input.GetMouseButtonDown()只在单个帧中执行,所以菜单出现了,但只有那一帧。我通过将其替换为Input.GetMouseButton()来解决了这个问题,后者会在按下按钮的同时持续执行。 - AmyLiz
2个回答

2

Input.GetMouseButtonDown() 仅在单个帧中执行,因此 GUI.Box 被绘制,但仅在单个帧中。

要解决这个问题,可以使用 Input.GetMouseButton() ,因为它会在按下按钮的同时执行。


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

enter image description here

然后我只需将一个点击函数附加到按钮上,当有人单击它时触发动画
public class ShowMenu : MonoBehaviour
{

    public Animator ObjectBtnAnimations;

    public void HideObjControls()
    {
        if (ObjectBtnAnimations.GetBool("hide"))
        {
            ObjectBtnAnimations.SetBool("hide", false);
        }
        else
        {
            ObjectBtnAnimations.SetBool("hide", true);
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接