天天看点

关于Unity中UGUI做菜单栏弹出

这里我用的的英文位移用了

Translate和Vector3.Lerp

使用鼠标位置的判断结合菜单栏的位置状态来进行开关控制

这里面有一个坑就是锚点坐标,UI界面显示的都是锚点坐标,跟UI的世界坐标和当地坐标没有半毛钱的关系(开始的时候我纠结到坐标位移问题上了)

其实这里用动画的话还是比较方便的,但是我这里直接用代码写了位移,做个笔记以后再遇见UI位移问题就不会出错了

下面直接上代码(这段代码封装到一个函数里面直接放到更新函数中就可以啦):

if (PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition.x >= f)//这个数值是UI的x位置
            UIIsMovetr = true;
  if (PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition.x <= -f)
            UIIsMovefa = true;
           

// UI按钮界面的显示时

if (Input.mousePosition.x >  && UIIsMovetr)
   {
            Debug.Log("UI按钮界面的显示时");
            PanelScrollViewUI.transform.GetComponent<RectTransform>().Translate(Vector3.Lerp(PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition, PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition=new Vector2(-f,), UIMoveSpeed*Time.deltaTime));
            if (PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition.x<=-f)
            {
                UIIsMovetr = false;
                PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(-f, );
            }
   }
           

// UI按钮界面的隐藏时

if (Input.mousePosition.x >  && Input.mousePosition.x <  && UIIsMovefa)
        {
            Debug.Log("UI按钮界面的隐藏时");
            PanelScrollViewUI.transform.GetComponent<RectTransform>().Translate(Vector3.Lerp(PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition, PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition=new Vector2(f,), UIMoveSpeed * Time.deltaTime));
            if (PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition.x >= f)
            {
                UIIsMovefa = false;
                PanelScrollViewUI.transform.GetComponent<RectTransform>().anchoredPosition = new Vector2(f, );
            }
        }
           

继续阅读