滑动面板在制作帮助界面时经常被用到,功能如图所示:
代码如下:
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using System.Collections.Generic;
using UnityEngine.UI;
public class SilderPanel : MonoBehaviour,IDragHandler,IEndDragHandler
{
//显示信息的Text
public Text pageNumberText;
//滑动是图片移动的速度
public float dragSpeed = 10;
//滑到下一页的判断条件
public float offsetSpeed = 3;
//移动到下一页的速度
public float moveSpeed = 10;
//子页总数
private int totalPageNumber=5;
//当前滑动的偏移量
private Vector2 delta;
//是否滑倒下一页
private bool isHoming = false;
//当前的页数
private int index = 0;
//父物体以计算相对位置
private Transform parentTF;
//介绍页
private List< Transform> childArrayList;
void Start()
{
parentTF = this.transform.parent;
totalPageNumber = this.transform.childCount;
childArrayList = new List<Transform> (totalPageNumber);
for (int i = 0; i < totalPageNumber; i++) {
childArrayList.Add (this.transform.GetChild (i));
}
pageNumberText.text = (index + 1) + "/" + totalPageNumber;
}
void Update()
{
Homing();
}
//1.拖拽时移动
public void OnDrag(PointerEventData eventData)
{
delta = eventData.delta;
this.transform.Translate(delta.x * Time.deltaTime * dragSpeed, 0, 0);
}
//2.归位
public void OnEndDrag(PointerEventData eventData)
{
//如果速度达到1
if (Mathf.Abs(delta.x) >= offsetSpeed)
{
//归位
//鼠标向左移动 , 物体向左移动
if (delta.x < 0)
index++;
else
index--;
//限制索引范围
index = Mathf.Clamp(index, 0, childArrayList.Count - 1);
}
isHoming = true;
pageNumberText.text = (index + 1) + "/" + totalPageNumber;
}
//3.呈现界面
private void Homing()
{
if (isHoming)
{
Vector3 targetPosition = parentTF.position - childArrayList[index].position + this.transform.position;
this.transform.position = Vector3.Lerp(this.transform.position, targetPosition, Time.deltaTime * moveSpeed);
//如果当前面板 接近 目标位置
if ((this.transform.position - targetPosition).sqrMagnitude<1)
{
this.transform.position = targetPosition;
isHoming = false;
}
}
}
}
工程下载地址:http://download.csdn.net/download/yongshuangzhao/10162471