UGUI(七)界面拖动和焦点界面
来源:互联网 发布:李涛疯狂淘宝上市 编辑:程序博客网 时间:2024/05/18 15:30
http://blog.sina.com.cn/s/blog_89d90b7c0102vj9e.html
一般软件和游戏有多窗口多界面时,都可以拖动子界面和排序子界面【点击后变成焦点界面显示在最前面】。如下图:
UGUI的官方例子中有实现拖动的脚本DragPanel,不过它没支持界面排序,加个排序很简单,在按下鼠标时调用tranform的SetSiblingIndex即可,值越大越靠前,在这里我只是简单的实现了这个基本功能,最终用到项目是需要设计一下的,因为很多时候需要记录打开界面的一些信息,在这里就不多说了。
代码如下:
- using
UnityEngine; - using
UnityEngine.UI; - using
UnityEngine.EventSystems; - using
System.Collections; -
- public
class DragPanel : MonoBehaviour, IPointerDownHandler, IDragHandler { -
-
// 鼠标起点 -
private Vector2 originalLocalPointerPosi tion; -
// 面板起点 -
private Vector3 originalPanelLocalPositi on; -
// 当前面板 -
private RectTransform panelRectTransform; -
// 父节点,这个最好是UI父节点,因为它的矩形大小刚好是屏幕大小 -
private RectTransform parentRectTransform; -
-
private static int siblingIndex 0;= -
void Awake () { -
panelRectTransform = transform.parent as RectTransform; -
parentRectTransform = panelRectTransform.parent as RectTransform; -
} -
-
// 鼠标按下 -
public void OnPointerDown (PointerEventData data) { -
siblingIndex++; -
panelRectTransform.transform.SetSiblingIndex(siblingIndex); -
// 记录当前面板起点 -
originalPanelLocalPositi on = panelRectTransform.localPosition; -
// 通过屏幕中的鼠标点,获取在父节点中的鼠标点 -
// parentRectTransform:父节点 -
// data.position:当前鼠标位置 -
// data.pressEventCamera:当前事件的摄像机 -
// originalLocalPointerPosi tion:获取当前鼠标起点 -
RectTransformUtility.ScreenPointToLocalPointI nRectangle (parentRectTransform, data.position, data.pressEventCamera, out originalLocalPointerPosi tion); -
} -
// 拖动 -
public void OnDrag (PointerEventData data) { -
if (panelRectTransform null== || null)parentRectTransform == -
return; -
Vector2 localPointerPosition; -
// 获取本地鼠标位置 -
if (RectTransformUtility.ScreenPointToLocalPointI nRectangle (parentRectTransform, data.position, data.pressEventCamera, out localPointerPosition)) { -
// 移动位置 = 本地鼠标当前位置 - 本地鼠标起点位置 -
Vector3 offsetToOriginal = localPointerPosition - originalLocalPointerPosi tion; -
// 当前面板位置 = 面板起点 + 移动位置 -
panelRectTransform.localPosition = originalPanelLocalPositi on + offsetToOriginal; -
} -
ClampToWindow (); -
} -
-
// 限制当前面板在父节点中的区域位置 -
void ClampToWindow () { -
// 面板位置 -
Vector3 pos = panelRectTransform.localPosition; -
-
// 如果是UI父节点,设置面板大小为0,那么最大最小位置为正负屏幕的一半 -
Vector3 minPosition = parentRectTransform.rect.min - panelRectTransform.rect.min; -
Vector3 maxPosition = parentRectTransform.rect.max - panelRectTransform.rect.max; -
-
pos.x = Mathf.Clamp (panelRectTransform.localPosition.x, minPosition.x, maxPosition.x); -
pos.y = Mathf.Clamp (panelRectTransform.localPosition.y, minPosition.y, maxPosition.y); -
-
panelRectTransform.localPosition = pos; -
} - }
阅读全文
0 0
- UGUI(七)界面拖动和焦点界面
- UGUI(七)界面拖动和焦点界面
- UGUI(七)界面拖动和焦点界面
- UGUI(六)_界面拖动和焦点界面
- toggle界面转化(UGUI)
- UGUI-界面适配
- Ugui游戏开始界面 设置界面弹出
- c#界面鼠标拖动
- WPF 鼠标拖动界面
- c#界面鼠标拖动
- Android:拖动退出界面
- QT --鼠标拖动界面
- 【Unity3D】UGUI向导式界面和组件复用
- Unity ugui拼界面规则
- Unity3D ugui 界面状态控制
- Htc Vive Sdk(OpenVR),Unity3d 开发,UGUI界面响应
- 【Unity3d】将PSD直接导出成UGUI界面(一)
- 【Unity3d】将PSD直接导出成UGUI界面(二)
- 2971:抓住那头牛
- Froms的使用实例
- 交换机的基础知识
- Foreach与迭代器
- 排序--直接插入排序
- UGUI(七)界面拖动和焦点界面
- 【七日牧函】基督教传统中的友谊
- gec210 i2c程序io模拟方式实现
- shiro-helloworld(1)
- Shell教程
- 排序--冒泡排序
- vb.net 教程 5-7 Bitmap类 2
- JAVA——IO流 之 节点流和处理流以及流的关闭顺序(5)
- Java中字符串截取使用