Unity UGUI實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果
本文實(shí)例為大家分享了Unity UGUI實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果的具體代碼,供大家參考,具體內(nèi)容如下
這個(gè)問(wèn)題真的是老生常談的事情了,不過(guò)在這里還是要說(shuō)一下,以便以后之需
首先看一下效果圖
最后在Content下面是一些Image
using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; using UnityEngine.EventSystems; using System; public class PageView : MonoBehaviour, IBeginDragHandler, IEndDragHandler { ScrollRect rect; //滑動(dòng)組件 //public ScrollRect rect2; //滑動(dòng)組件2 private float targethorizontal = 0; //滑動(dòng)的起始坐標(biāo) private bool isDrag = false; //是否拖拽結(jié)束 private List<float> posList = new List<float> ();//求出每頁(yè)的臨界角,頁(yè)索引從0開始 private int currentPageIndex = -1; public Action<int> OnPageChanged; private bool stopMove = true; public float smooting = 4; //滑動(dòng)速度 public float sensitivity = 0; private float startTime; private float startDragHorizontal; void Awake () { // rect = rect2; rect = transform.GetComponent<ScrollRect> (); // rect2 = transform.GetComponent<ScrollRect>(); float horizontalLength = rect.content.rect.width - GetComponent<RectTransform> ().rect.width; //float horizontalLength2 = rect2.content.rect.width - GetComponent<RectTransform>().rect.width; posList.Add (0); for(int i = 1; i < rect.content.transform.childCount - 1; i++) { posList.Add (GetComponent<RectTransform> ().rect.width * i / horizontalLength); } posList.Add (1); } void Update () { if(!isDrag && !stopMove) { startTime += Time.deltaTime; float t = startTime * smooting; rect.horizontalNormalizedPosition = Mathf.Lerp (rect.horizontalNormalizedPosition , targethorizontal , t); // rect2.horizontalNormalizedPosition = Mathf.Lerp(rect2.horizontalNormalizedPosition, targethorizontal, t); if (t >= 1) stopMove = true; } } public void pageTo (int index) { if(index >= 0 && index < posList.Count) { rect.horizontalNormalizedPosition = posList[index]; SetPageIndex(index); } else { Debug.LogWarning ("頁(yè)碼不存在"); } } private void SetPageIndex (int index) { if(currentPageIndex != index) { currentPageIndex = index; if(OnPageChanged != null) OnPageChanged (index); } } public void OnBeginDrag (PointerEventData eventData) { isDrag = true; startDragHorizontal = rect.horizontalNormalizedPosition; // startDragHorizontal = rect2.horizontalNormalizedPosition; } public void OnEndDrag (PointerEventData eventData) { float posX = rect.horizontalNormalizedPosition; posX += ((posX - startDragHorizontal) * sensitivity); posX = posX < 1 ? posX : 1; posX = posX > 0 ? posX : 0; int index = 0; float offset = Mathf.Abs (posList[index] - posX); for(int i = 1; i < posList.Count; i++) { float temp = Mathf.Abs (posList[i] - posX); if(temp < offset) { index = i; offset = temp; } } SetPageIndex (index); targethorizontal = posList[index]; //設(shè)置當(dāng)前坐標(biāo),更新函數(shù)進(jìn)行插值 isDrag = false; startTime = 0; stopMove = false; } }
最后看一下,怎么設(shè)置的:
剩下的就沒(méi)有什么了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#使用Shader實(shí)現(xiàn)夜幕降臨倒計(jì)時(shí)的效果
這篇文章主要介紹了C#使用Shader實(shí)現(xiàn)夜幕降臨倒計(jì)時(shí)的效果,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10C#基于TimeSpan實(shí)現(xiàn)倒計(jì)時(shí)效果的方法
這篇文章主要介紹了C#基于TimeSpan實(shí)現(xiàn)倒計(jì)時(shí)效果的方法,比較實(shí)用的功能,需要的朋友可以參考下2014-08-08C#關(guān)于Task.Yeild()函數(shù)的討論
這篇文章主要介紹了C#中關(guān)于Task.Yeild()函數(shù)的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07C#實(shí)現(xiàn)的AES加密解密完整實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)的AES加密解密,結(jié)合完整實(shí)例形式分析了C#實(shí)現(xiàn)的AES算法進(jìn)行加密與解密的相關(guān)技巧,需要的朋友可以參考下2016-07-07區(qū)分WCF與WebService的異同、優(yōu)勢(shì)
這篇文章主要幫助大家區(qū)分WCF與WebService的異同、優(yōu)勢(shì),分為三大方面進(jìn)行研究學(xué)習(xí),感興趣的小伙伴們可以參考一下2016-03-03C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中
這篇文章介紹了C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04C#?Winform實(shí)現(xiàn)復(fù)制文件顯示進(jìn)度
這篇文章主要介紹了C#?Winform實(shí)現(xiàn)復(fù)制文件顯示進(jìn)度,用進(jìn)度條來(lái)顯示復(fù)制情況,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三
C#語(yǔ)言類型系統(tǒng)提出的一個(gè)核心概念裝箱(boxing)拆箱(unboxing)。裝箱和取消裝箱的概念是C#的類型系統(tǒng)的核心。它在“值類型”和“引用類型”之間的架起了一座橋梁,使得任何“值類型”的值都可以轉(zhuǎn)換為object類型的值,反過(guò)來(lái)轉(zhuǎn)換也可以。2015-10-10