【问题标题】:How to create a menu on click of GameObject? (Unity)如何在单击 GameObject 时创建菜单? (统一)
【发布时间】:2018-04-02 16:00:19
【问题描述】:

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

【问题讨论】:

  • 您是否为希望悬停的对象添加了对撞机?
  • 我不知道 Input.GetMouseButtonDown() 只执行一帧,所以菜单出现了,但只针对那一帧。我通过用 Input.GetMouseButton() 替换它来解决这个问题,只要按下按钮就会执行

标签: c# user-interface unity3d menu mouseover


【解决方案1】:

Input.GetMouseButtonDown() 仅针对单帧执行,因此 GUI.Box 正在绘制但仅针对单帧。

要解决此问题,可以使用 Input.GetMouseButton(),因为只要按下按钮,它就会一直执行。

【讨论】:

    【解决方案2】:

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

    然后我只是将一个点击功能附加到一个按钮中,当有人点击它时触发动画

    public class ShowMenu : MonoBehaviour
    {
    
        public Animator ObjectBtnAnimations;
    
        public void HideObjControls()
        {
            if (ObjectBtnAnimations.GetBool("hide"))
            {
                ObjectBtnAnimations.SetBool("hide", false);
            }
            else
            {
                ObjectBtnAnimations.SetBool("hide", true);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2015-03-09
      相关资源
      最近更新 更多