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>
/// 開(kāi)始觸摸時(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)超過(guò)頁(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)文章
對(duì)指定的網(wǎng)頁(yè)進(jìn)行截圖的效果 C#版
對(duì)指定的網(wǎng)頁(yè)進(jìn)行截圖的效果 C#版...2007-08-08
c# 執(zhí)行動(dòng)態(tài)編譯的方法實(shí)例詳解
在C#中執(zhí)行動(dòng)態(tài)編譯的一種方法是使用 CSharpCodeProvider 類,這篇文章主要介紹了c# 執(zhí)行動(dòng)態(tài)編譯的方法,需要的朋友可以參考下2024-03-03
C#結(jié)合JS修改解決KindEditor彈出層問(wèn)題
KindEditor 是一款出色的富文本HTML在線編輯器,這里我們講述在使用中遇到的一個(gè)問(wèn)題,在部署到某些 WEB 應(yīng)用項(xiàng)目中,點(diǎn)擊類似彈出層功能時(shí),只顯示了遮罩層,而內(nèi)容層則定位無(wú)法正確顯示,所以本文給大家介紹了C#結(jié)合JS 修改解決 KindEditor 彈出層問(wèn)題2024-06-06
C#使用Ado.Net更新和添加數(shù)據(jù)到Excel表格的方法
這篇文章主要介紹了C#使用Ado.Net更新和添加數(shù)據(jù)到Excel表格的方法,較為詳細(xì)的分析了OLEDB的原理與使用技巧,可實(shí)現(xiàn)較為方便的操作Excel數(shù)據(jù),需要的朋友可以參考下2015-04-04
C#實(shí)現(xiàn)關(guān)閉子窗口而不釋放子窗口對(duì)象的方法
下面小編就為大家?guī)?lái)一篇C#實(shí)現(xiàn)關(guān)閉子窗口而不釋放子窗口對(duì)象的方法 。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01

