Unity實(shí)現(xiàn)引導(dǎo)頁(yè)效果
本文實(shí)例為大家分享了Unity實(shí)現(xiàn)引導(dǎo)頁(yè)效果的具體代碼,供大家參考,具體內(nèi)容如下
效果圖:
1、創(chuàng)建Canvas,設(shè)置RenderMode=ScreenSpace-Overlay,UIScaleMode = ScaleWithScreenSize,
ReferenceResolution(x=1080,y=1920)
2、創(chuàng)建一個(gè)RawImage,命名為(parentGoImg),并做如下設(shè)置
3、在parentGoImg下建幾個(gè)RawImage,賦予想展示的圖片,并做如下設(shè)置
4、添加如下腳本給parentGoImg
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using DG.Tweening; using UnityEngine.UI; public class Asd : MonoBehaviour,IBeginDragHandler, IDragHandler,IEndDragHandler { /// <summary> /// 可移動(dòng)的最大最小X軸坐標(biāo) /// </summary> private float minX, maxX; /// <summary> /// 開始觸摸時(shí),算出偏移值,防止跳變 /// </summary> private float offsetX; /// <summary> /// 靈敏度 /// </summary> private float sensitivityX; /// <summary> /// 當(dāng)前顯示第幾頁(yè) /// </summary> private int currentShowIndex = 1; private void Start() { (transform as RectTransform).pivot = new Vector2(0, 0.5f); Debug.Log(Screen.width + " " + Screen.height); for (int i = 0; i < transform.childCount; i++) { (transform.GetChild(i) as RectTransform).sizeDelta = new Vector2(0, 0); //canvas的RenderMode要設(shè)置成Overlay形式 //這里i*1080是因?yàn)閏anvas的UIScaleMode設(shè)置成了ScaleWithScreenSize,Resolution為x=1080,y=1920 //如果canvas的UIScaleMode設(shè)置成ConstantPixelSize則吧這里的i*1080改成i*Screen.width (transform.GetChild(i) as RectTransform).anchoredPosition = new Vector2(i * 1080.0f, 0); } minX = -((transform.childCount - 1) * Screen.width); maxX = 0.0f; //如果移動(dòng)超過頁(yè)面的五分之一,則切換頁(yè)面 sensitivityX = Screen.width / 5; } public void OnBeginDrag(PointerEventData eventData) { offsetX = transform.position.x - Input.mousePosition.x; } public void OnDrag(PointerEventData eventData) { //將物體坐標(biāo)限制在最大最小X軸坐標(biāo)內(nèi) transform.position = new Vector2(Input.mousePosition.x + offsetX, transform.position.y); if (transform.position.x <= minX) { transform.position = new Vector2(minX, transform.position.y); } else if (transform.position.x >= maxX) { transform.position = new Vector2(maxX, transform.position.y); } } public void OnEndDrag(PointerEventData eventData) { //判斷坐標(biāo),是否需要切換頁(yè)面 if (transform.position.x > GetLeftX()) { currentShowIndex--; } else if (transform.position.x < GetRightX()) { currentShowIndex++; } transform.DOMoveX(-(currentShowIndex - 1) * Screen.width, 0.2f); } float GetLeftX() { return -((currentShowIndex - 1) * Screen.width - sensitivityX); } float GetRightX() { return -((currentShowIndex - 1) * Screen.width + sensitivityX); } }
運(yùn)行即可看到效果
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)Dev Grid拖拽移動(dòng)行的方法
這篇文章主要介紹了C#實(shí)現(xiàn)Dev Grid拖拽移動(dòng)行的方法,可實(shí)現(xiàn)Dev Grid拖拽移動(dòng)行的效果,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05C#去掉字符串中所有匹配的字符String.Replace方法
在C#中,如果你想要去掉字符串中所有匹配的字符,你可以使用String.Replace方法,本文主要介紹了C#去掉字符串中所有匹配的字符String.Replace方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04C#使用TCP協(xié)議實(shí)現(xiàn)數(shù)據(jù)發(fā)送和接受的方法
這篇文章主要介紹了c#使用TCP協(xié)議實(shí)現(xiàn)數(shù)據(jù)發(fā)送和接受,使用TCP協(xié)議實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接受包括客戶端和服務(wù)端兩個(gè)部分,本文通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04C#+無unsafe的非托管大數(shù)組示例詳解(large unmanaged array in c# without ‘u
這篇文章主要給大家介紹了關(guān)于C#+無unsafe的非托管大數(shù)組(large unmanaged array in c# without 'unsafe' keyword)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Unity UGUI LayoutRebuilder自動(dòng)重建布局介紹及使用
這篇文章主要為大家介紹了Unity UGUI LayoutRebuilder自動(dòng)重建布局介紹及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07