unity实现图片轮播效果_UGUI轮播图组件实现方法详解

本文实例为大家分享了UGUI轮播图组件实现的具体代码,供大家参考,具体内容如下要用到,于是就自已做了一个,自认为封装上还是OK的,开发于unity5.1.2。支持自动轮播、手势切换、代码调用切换,支持水平和竖直两个方向以及正负方向轮播,轮播索引改变有回调可以用,也可以获取到当前处于正中的子元素。要注意的是,向轮播列表中加入新元素不能直接setparent,要调用该组件的AddChild方法下面是鄙...
摘要由CSDN通过智能技术生成

本文实例为大家分享了UGUI轮播图组件实现的具体代码,供大家参考,具体内容如下

要用到,于是就自已做了一个,自认为封装上还是OK的,开发于unity5.1.2。

支持自动轮播、手势切换、代码调用切换,支持水平和竖直两个方向以及正负方向轮播,轮播索引改变有回调可以用,也可以获取到当前处于正中的子元素。

要注意的是,向轮播列表中加入新元素不能直接setparent,要调用该组件的AddChild方法

下面是鄙人的代码:

/// 主要关注属性、事件及函数:

/// public int CurrentIndex;

/// public Action OnIndexChange;

/// public virtual void MoveToIndex(int ind);

/// public virtual void AddChild(RectTransform t);

/// by yangxun

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

using UnityEngine.UI;

using UnityEngine.EventSystems;

using System;

///

/// 轮播图组件

///

[RequireComponent(typeof(RectTransform)), ExecuteInEditMode]

public class Carousel : UIBehaviour, IEventSystemHandler, IBeginDragHandler, IInitializePotentialDragHandler, IDragHandler, IEndDragHandler, ICanvasElement {

///

/// 子物体size

///

public Vector2 CellSize;

///

/// 子物体间隔

///

public Vector2 Spacing;

///

/// 方向

///

public Axis MoveAxis;

///

/// Tween时的步数

///

public int TweenStepCount = 10;

///

/// 自动轮播

///

public bool AutoLoop = false;

///

/// 轮播间隔

///

public float LoopSpace = 1;

///

/// 轮播方向--1为向左移动,-1为向右移动

///

public int LoopDir = 1;

///

/// 可否拖动

///

public bool Drag = true;

///

/// 位于正中的子元素变化的事件,参数为index

///

public Action OnIndexChange;

///

/// 当前处于正中的元素

///

public int CurrentIndex {

get {

return m_index;

}

}

private bool m_Dragging = false;

private bool m_IsNormalizing = false;

private Vector2 m_CurrentPos;

private int m_currentStep = 0;

private RectTransform viewRectTran;

private Vector2 m_PrePos;

private int m_index = 0,m_preIndex = 0;

private RectTransform header;

private bool contentCheckCache = true;

private float currTimeDelta = 0;

private float viewRectXMin {

get{

Vector3[] v = new Vector3[4];

viewRectTran.GetWorldCorners(v);

return v[0].x;

}

}

private float viewRectXMax {

get {

Vector3[] v = new Vector3[4];

viewRectTran.GetWorldCorners(v);

return v[3].x;

}

}

private float viewRectYMin {

get {

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值