IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity多个UI左右循环翻页 -> 正文阅读

[游戏开发]Unity多个UI左右循环翻页

上效果

?

?实现起来也很简单,配合DoTween插件,一个数组,一个索引就可以实现。指定五个位置,通过索引拿到图片在五个位置上一直tween就可以了。

using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MySelect : MonoBehaviour
{
    public Image[] all;
    public int StartIndex = 0;
    public Transform pos_left_2;
    public Transform pos_left;
    public Transform pos_Mid;
    public Transform pos_right;
    public Transform pos_right_2;
    int length = 0;
    public float speed = 1f;
    [HideInInspector]
    public bool IsTweening = false;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))
            TurnLeft();
        if (Input.GetKeyDown(KeyCode.RightArrow))
            TurnRight();
    }
    private void Start()
    {
        length = all.Length;
        Mid_Index = StartIndex;
        init();
    }
    int Mid_Index = 0;
    int left_Index;
    int left_Index_2;
    int right_Index;
    int right_Index_2;
    public void init()
    {
        for (int i = 0; i < length; i++)
        {
            all[i].transform.localScale = Vector3.zero;

            all[i].gameObject.SetActive(false);
        }
        all[Mid_Index].transform.position = pos_Mid.position;
        all[Mid_Index].transform.localScale = pos_Mid.localScale;
        all[Mid_Index].gameObject.SetActive(true);
        left_Index = Mid_Index - 1;
        if (left_Index < 0) left_Index += length;
        all[left_Index].transform.position = pos_left.position;
        all[left_Index].transform.localScale = pos_left.localScale;
        all[left_Index].gameObject.SetActive(true);
        right_Index = Mid_Index + 1;
        if (right_Index >= length) right_Index -= length;
        all[right_Index].transform.position = pos_right.position;
        all[right_Index].transform.localScale = pos_right.localScale;
        all[right_Index].gameObject.SetActive(true);

        all[right_Index].transform.SetAsLastSibling();
        all[left_Index].transform.SetAsLastSibling();
        all[Mid_Index].transform.SetAsLastSibling();

    }
    //向左    索引增加
    public void TurnLeft()
    {
        if (!IsTweening)
            StartCoroutine(ITurnLeft());
    }
    IEnumerator ITurnLeft()
    {
        IsTweening = true;
        //右侧 生成一个
        right_Index_2 = right_Index + 1;
        if (right_Index_2 >= length) right_Index_2 -= length;
        all[right_Index_2].transform.position = pos_right_2.position;
        all[right_Index_2].transform.localScale = pos_right_2.localScale;
        all[right_Index_2].gameObject.SetActive(true);

        all[right_Index_2].transform.SetAsLastSibling();
        all[right_Index].transform.SetAsLastSibling();
        all[Mid_Index].transform.SetAsLastSibling();

        //滑动
        all[right_Index_2].transform.DOMove(pos_right.position, speed);
        all[right_Index_2].transform.DOScale(pos_right.localScale, speed);
        all[right_Index].transform.DOMove(pos_Mid.position, speed);
        all[right_Index].transform.DOScale(pos_Mid.localScale, speed);

        all[Mid_Index].transform.DOMove(pos_left.position, speed);
        all[Mid_Index].transform.DOScale(pos_left.localScale, speed);

        all[left_Index].transform.DOMove(pos_left_2.position, speed); ;
        all[left_Index].transform.DOScale(pos_left_2.localScale, speed);
        yield return new WaitForSeconds(speed);
        all[left_Index].gameObject.SetActive(false);
        Mid_Index++;
        if (Mid_Index >= length) Mid_Index -= length;
        left_Index = Mid_Index - 1;
        if (left_Index < 0) left_Index += length;
        right_Index = Mid_Index + 1;
        if (right_Index >= length) right_Index -= length;
        IsTweening = false;
    }
    //向右  索引减小
    public void TurnRight()
    {
        Debug.LogError($"left_2={left_Index_2},left={left_Index},mid={Mid_Index},right={right_Index},right_2={right_Index_2}");
        //左侧 生成一个
        if (!IsTweening)
            StartCoroutine(ITurnRight());
    }
    IEnumerator ITurnRight()
    {
        IsTweening = true;
        left_Index_2 = left_Index - 1;
        if (left_Index_2 < 0) left_Index_2 += length;

        all[left_Index_2].transform.position = pos_left_2.position;
        all[left_Index_2].transform.localScale = pos_left_2.localScale;
        all[left_Index_2].gameObject.SetActive(true);

        all[left_Index_2].transform.SetAsLastSibling();
        all[left_Index].transform.SetAsLastSibling();
        all[Mid_Index].transform.SetAsLastSibling();

        //滑动
        all[left_Index_2].transform.DOMove(pos_left.position, speed);
        all[left_Index_2].transform.DOScale(pos_left.localScale, speed);

        all[left_Index].transform.DOMove(pos_Mid.position, speed);
        all[left_Index].transform.DOScale(pos_Mid.localScale, speed);

        all[Mid_Index].transform.DOMove(pos_right.position, speed);
        all[Mid_Index].transform.DOScale(pos_right.localScale, speed);

        all[right_Index].transform.DOMove(pos_right_2.position, speed); ;
        all[right_Index].transform.DOScale(pos_right_2.localScale, speed);
        yield return new WaitForSeconds(speed);
        all[right_Index].gameObject.SetActive(false);
        Mid_Index--;
        if (Mid_Index < 0) Mid_Index += length;
        left_Index = Mid_Index - 1;
        if (left_Index < 0) left_Index += length;
        right_Index = Mid_Index + 1;
        if (right_Index >= length) right_Index -= length;
        IsTweening = false;
    }
}

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:55:20  更:2021-11-12 19:55:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 0:51:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码