企业的网站建设前期工作总结,重庆网站建设哪家做的好,seo推广品牌排行榜,引流渠道有哪些平台一、需求 右键触发打开菜单#xff0c;左键在内部可选择选项#xff0c;左键单击菜单范围外关闭。难点在于屏幕坐标系#xff0c;鼠标位置#xff0c;UI位置之间的关系。
二、理论 前置知识#xff1a; unity中#xff0c;用RectTransform对象的position.x和position.y表…一、需求 右键触发打开菜单左键在内部可选择选项左键单击菜单范围外关闭。难点在于屏幕坐标系鼠标位置UI位置之间的关系。
二、理论 前置知识 unity中用RectTransform对象的position.x和position.y表示UI在屏幕中相对于左下角的正值的位置。而两者所代表的点就是UI中的Pivot的点。 Pivot中,0也是最左或者最下都是同一个参考。Pivot 01则表示UI坐标点选取为最左边最上边也就是左上角用0-1的比例表示。细心可以发现Pivot就是一个空心圆。这个点就表示UI的位置点。 pivot(0,1)位置 从1920换到3840的分辨率后虽然UI可以做比例大小适应但是rect中的width和height属性是不会变的就是制作UI时输入的数值。所以如果要改分辨率做适配这两个值不能直接用要根据屏幕比例去计算真正的宽高。 调整后的宽高为小学的等比计算 float adaptScaleWidth Screen.width * (menuRect.rect.width / 1920f);float adaptScaleHeight Screen.height * (menuRect.rect.height / 1080f); 鼠标在屏幕中的位置左下角为零点右上增加分辨率更改鼠标在屏幕中的位置值也不同。直接用api获取
Input.mousePosition.x
Input.mousePosition.y
三、关键代码
1.右键打开事件
public class CustomBtn : MonoBehaviour,IPointerDownHandler
{void Start(){}public void OnPointerDown(PointerEventData eventData){//你要触发的代码if (eventData.buttonPointerEventData.InputButton.Right){RightClickMenuPanel.Instance.menuRect.position Input.mousePosition;RightClickMenuPanel.Instance.ShowRightClickMenu(true);}} 继承 IPointerDownHandler实现OnPointerDown用PointerEventData判定按键。先设定右键菜单的pivot位置再打开setactive(true)。
二、判定 private void Update(){//左键关闭情况if (Input.GetMouseButtonDown(0)){float adaptScaleWidth Screen.width * (menuRect.rect.width / 1920f);float adaptScaleHeight Screen.height * (menuRect.rect.height / 1080f);//超出菜单范围关闭if (Input.mousePosition.xmenuRect.position.x ||Input.mousePosition.xmenuRect.position.x adaptScaleWidth ||Input.mousePosition.ymenuRect.position.y- adaptScaleHeight ||Input.mousePosition.ymenuRect.position.y){ShowRightClickMenu(false);}}}public void ShowRightClickMenu(bool flag){menuRect.gameObject.SetActive(flag);} 在其他地方挂脚本换算判定鼠标位置在范围外设置关闭。