游戏中有时候会见到图片轮播的效果,那么这里就自己封装了一个,包括自动轮播、切页按钮控制、页码下标更新、滑动轮播、切页后的回调等等 。
下面,先上一个简陋的gif动态效果图
从图中可以看出,该示例包括了三张图片的轮播,左右分别是上一张和下一张的按钮,右下角显示了当前是第几章的页码下标。
直接上脚本:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace UnityEngine.UI
{
[AddComponentMenu("UI/Slidershow", 39)] //添加菜单
[ExecuteInEditMode] //编辑模式下可执行
[DisallowMultipleComponent] //不可重复
[RequireComponent(typeof(RectTransform))] //依赖于RectTransform组件
public class Slideshow : UIBehaviour,IPointerDownHandler,IPointerUpHandler
{
public enum MovementType
{
///
/// 循环
///
Circulation, //循环,轮播到最后一页之后,直接回到第一页
///
/// 来回往复
///
PingPong, //来回往复,轮播到最后一页之后,倒序轮播,到第一页之后,同理
}
public enum MoveDir
{
Left,
Right,
}
[SerializeField]
private MovementType m_movement = MovementType.Circulation;
public MovementType Movement { get { return m_movement; } set { m_movement = value; } }
[SerializeField]
private RectTransform m_content;
public RectTransform Content { get { return m_content; } set { m_content = value; } }
[SerializeField]
private Button m_lastPageButton;
public Button LastPageButton { get { return m_lastPageButton; } set { m_lastPageButton = value; } }
[SerializeField]
private Button m_nextPageButton;
public Button NextPageButton { get { return m_nextPageButton; } set { m_nextPageButton = value; } }
///
/// 自动轮播时长
///
[SerializeField]
private float m_showTime = 2.0f;
public float ShowTime { get { return m_showTime; } set { m_showTime = value; } }
///
/// 是否自动轮播
///
[SerializeField]
private bool m_autoSlide = false;
public bool AutoSlide { get { return m_autoSlide; }set { m_autoSlide = value; } }
///
/// 自动轮播方向,-1表示向左,1表示向右
///
private MoveDir m_autoSlideDir = MoveDir.Right;
///
/// 是否允许拖动切页
///
[SerializeField]
private bool m_allowDrag = true;
public bool AllowDrag { get { return m_allowDrag; }set { m_allowDrag = value; } }
///
/// 当前显示页的页码,下标从0开始
///
private int m_curPageIndex = 0;
public int CurPageIndex { get { return m_curPageIndex; } }
///
/// 最大页码
///
private int m_maxPageIndex = 0;
public int MaxPageIndex { get { return m_maxPageIndex; } }
///
/// 圆圈页码ToggleGroup
///
[SerializeField]
private ToggleGroup m_pageToggleGroup;
public ToggleGroup PageToggleGroup { get { return m_pageToggleGroup; } set { m_pageToggleGroup = value; } }
///
/// 圆圈页码Toggle List
///
private List m_pageToggleList;
public List PageToggleLise { get { return m_pageToggleList; }}
//item数目
private int m_itemNum = 0;
public int ItemNum { get { return m_itemNum; } }
//以Toggle为Key,返回页码
private Dictionary m_togglePageNumDic = null;
private float m_time = 0f;
private List m_c