using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
public class BagManager : MonoBehaviour
{
public Button prev;//上一页
public Button next;//下一页
public Button first;//第一页
public Button last;//最后一页
public Transform items;//页父对象
public int maxBagPage = 5;//最大页数
public int nowNum = 1;//当前显示的是第几页
public Text pageText;//当前页text
public Color oldColor;//非禁用的按钮颜色
int widthMove = 765;//items的GridLayoutGroup的宽度,每次滑动的距离
void Start()
{
oldColor = prev.GetComponent<Image>().color;
maxBagPage = items.childCount;
widthMove = (int)items.GetComponent<RectTransform>().rect.width;
pageText.text = nowNum.ToString() + "/" + items.childCount.ToString();
SetFirstBlackColor();
prev.onClick.AddListener(PrevClick);
next.onClick.AddListener(NextClick);
first.onClick.AddListener(FirstClick);
last.onClick.AddListener(LastClick);
}
//末页
private void LastClick()
{
//当前页小于最大页
if (nowNum < maxBagPage)
{
int k = nowNum;
//设置最后一页在当前页后面实现无缝移动
items.GetChild(maxBagPage - 1).SetSiblingIndex(k);
items.DOLocalMove(new Vector3(-widthMove * nowNum, items.localPosition.y, 0), 0.1f).OnComplete(() =>
{
items.GetChild(k).SetSiblingIndex(maxBagPage - 1);
//items坐标必须归位,便于上一页的移动
items.localPosition = new Vector3(-widthMove * (maxBagPage - 1), items.localPosition.y, 0);//
});
nowNum = maxBagPage;
pageText.text = nowNum.ToString() + "/" + maxBagPage;
SetLastBlackColor();//末页和下一页按钮变黑色
}
}
//首页
private void FirstClick()
{
//当前页大于最小页
if (nowNum > 1)
{
//移动的那一刻要让第一页显示在当前页的左边一页
items.localPosition = new Vector3(-widthMove, items.localPosition.y, 0);
//items的GridLayoutGroup的子物体隐藏
for (int i = 0; i < items.childCount; i++)
{
if (i != 0 && i != nowNum - 1)
{
items.GetChild(i).gameObject.SetActive(false);
}
}
//第一页坐标归为,第一页显示时的x坐标一直为0
items.DOLocalMove(new Vector3(0, items.localPosition.y, 0), 0.1f).OnComplete(() => {
//显示所有子物体,便于下一页的移动
for (int i = 0; i < items.childCount; i++)
{
items.GetChild(i).gameObject.SetActive(true);
}
});
nowNum = 1;
pageText.text = nowNum.ToString() + "/" + maxBagPage;
SetFirstBlackColor();//首页和上一页按钮变黑色
}
}
private void NextClick()
{
if (nowNum < maxBagPage)
{
nowNum++;
pageText.text = nowNum.ToString() + "/" + maxBagPage;
items.DOLocalMove(new Vector3(-widthMove * (nowNum - 1), items.localPosition.y, 0), 0.1f);
if (nowNum == maxBagPage)
SetLastBlackColor();
else
SetAllNotBlack();
}
}
private void PrevClick()
{
if (nowNum > 1)
{
nowNum--;
pageText.text = nowNum.ToString() + "/" + maxBagPage;
items.DOLocalMove(new Vector3(-widthMove * (nowNum - 1), items.localPosition.y, 0), 0.1f);
if (nowNum == 1)
SetFirstBlackColor();
else
SetAllNotBlack();
}
}
void SetLastBlackColor()
{
next.GetComponent<Image>().color = Color.black;
last.GetComponent<Image>().color = Color.black;
prev.GetComponent<Image>().color = oldColor;
first.GetComponent<Image>().color = oldColor;
}
void SetFirstBlackColor()
{
prev.GetComponent<Image>().color = Color.black;
first.GetComponent<Image>().color = Color.black;
next.GetComponent<Image>().color = oldColor;
last.GetComponent<Image>().color = oldColor;
}
void SetAllNotBlack()
{
prev.GetComponent<Image>().color = oldColor;
first.GetComponent<Image>().color = oldColor;
next.GetComponent<Image>().color = oldColor;
last.GetComponent<Image>().color = oldColor;
}
}
unity背包页无缝滑动
最新推荐文章于 2022-07-08 09:25:04 发布