用SuperScrollView实现抽奖滚动的效果

1.创建一个scrollview,在需要滚动区域上加上LoopListView2,需要生成的预制体放在ItemPrefab里面,注意:如果需要Item滚动的范围很大就要勾选supportscrollbar,否则只能在固定区域循环item。

 

2.创建一个viewPort,加上Mask组件

3.在content下面创建一个Item,加一个数据模型脚本,再加上LoopListViewItem2的脚本

 

4.创建一个空物体,挂上UI资源管理脚本

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

using System.Text;

using System.IO;

namespace SuperScrollView

{

public class ResManager : MonoBehaviour

{

public Sprite[] spriteObjArray;

// Use this for initialization

static ResManager instance = null;

 

string[] mWordList;

 

Dictionary<string, Sprite> spriteObjDict = new Dictionary<string, Sprite>();

 

public static ResManager Get

{

get

{

if (instance == null)

{

instance = Object.FindObjectOfType<ResManager>();

}

return instance;

}

 

}


 

void InitData()

{

spriteObjDict.Clear();

foreach (Sprite sp in spriteObjArray)

{

spriteObjDict[sp.name] = sp;

}

}

 

void Awake()

{

instance = null;

InitData();

}

 

public Sprite GetSpriteByName(string spriteName)

{

Sprite ret = null;

if (spriteObjDict.TryGetValue(spriteName, out ret))

{

return ret;

}

return null;

}


 

public string GetRandomSpriteName()

{

int count = spriteObjArray.Length;

int index = Random.Range(0, count);

return spriteObjArray[index].name;

}

 

public int SpriteCount

{

get

{

return spriteObjArray.Length;

}

}

 

public Sprite GetSpriteByIndex(int index)

{

if (index < 0 || index >= spriteObjArray.Length)

{

return null;

}

return spriteObjArray[index];

}

 

public string GetSpriteNameByIndex(int index)

{

if (index < 0 || index >= spriteObjArray.Length)

{

return "";

}

return spriteObjArray[index].name;

}

}

}

 

5.创建一个空物体挂上数据管理脚本

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

 

namespace SuperScrollView

{


 

public class DataSourceMgr : MonoBehaviour

{

 

List<LuckDrawRewardCoinsModel> mItemDataList = new List<LuckDrawRewardCoinsModel>();

System.Action mOnRefreshFinished = null;

System.Action mOnLoadMoreFinished = null;

int mLoadMoreCount = 20;

float mDataLoadLeftTime = 0;

bool mIsWaittingRefreshData = false;

bool mIsWaitLoadingMoreData = false;

public int mTotalDataCount = 10000;

 

static DataSourceMgr instance = null;

 

public static DataSourceMgr Get

{

get

{

if (instance == null)

{

instance = Object.FindObjectOfType<DataSourceMgr>();

}

return instance;

}

 

}

 

void Awake()

{

Init();

}


 

public void Init()

{

DoRefreshDataSource();

}

 

public LuckDrawRewardCoinsModel GetItemDataByIndex(int index)

{

if (index < 0 || index >= mItemDataList.Count)

{

return null;

}

return mItemDataList[index];

}


 

public int TotalItemCount

{

get

{

return mItemDataList.Count;

}

}

 

public void RequestRefreshDataList(System.Action onReflushFinished)

{

mDataLoadLeftTime = 1;

mOnRefreshFinished = onReflushFinished;

mIsWaittingRefreshData = true;

}

 

public void RequestLoadMoreDataList(int loadCount,System.Action onLoadMoreFinished)

{

mLoadMoreCount = loadCount;

mDataLoadLeftTime = 1;

mOnLoadMoreFinished = onLoadMoreFinished;

mIsWaitLoadingMoreData = true;

}

 

public void Update()

{

if (mIsWaittingRefreshData)

{

mDataLoadLeftTime -= Time.deltaTime;

if (mDataLoadLeftTime <= 0)

{

mIsWaittingRefreshData = false;

DoRefreshDataSource();

if (mOnRefreshFinished != null)

{

mOnRefreshFinished();

}

}

}

else if (mIsWaitLoadingMoreData)

{

mDataLoadLeftTime -= Time.deltaTime;

if (mDataLoadLeftTime <= 0)

{

mIsWaitLoadingMoreData = false;

DoLoadMoreDataSource();

if (mOnLoadMoreFinished != null)

{

mOnLoadMoreFinished();

}

}

}

 

}

 

public void SetDataTotalCount(int count)

{

mTotalDataCount = count;

DoRefreshDataSource();

}

 

void DoRefreshDataSource()

{

mItemDataList.Clear();

for (int i = 0; i < mTotalDataCount; ++i)

{

LuckDrawRewardCoinsModel tData = LuckDrawRewardCoinsItemController.Instance.RewardCoinsDataList[Random.Range(0,6)];

//tData.CoinsIcon = LuckDrawRewardCoinsItemController.Instance.RewardCoinsDataList[i].CoinsIcon;

//tData.RewardCoins = LuckDrawRewardCoinsItemController.Instance.RewardCoinsDataList[i].RewardCoins;

mItemDataList.Add(tData);

}

}

 

void DoLoadMoreDataSource()

{

int count = mItemDataList.Count;

for (int k = 0; k < mLoadMoreCount; ++k)

{

int i = k + count;

LuckDrawRewardCoinsModel tData = LuckDrawRewardCoinsItemController.Instance.RewardCoinsDataList[Random.Range(0,6)];

//tData.CoinsIcon = LuckDrawRewardCoinsItemController.Instance.RewardCoinsDataList[i].CoinsIcon;//ResManager.Get.GetSpriteNameByIndex(Random.Range(0, 10));

//tData.RewardCoins = LuckDrawRewardCoinsItemController.Instance.RewardCoinsDataList[i].RewardCoins;

mItemDataList.Add(tData);

}

}


 

}

 

}

 

6.把需要创建的对象用json写入:如每个对象的图片,属性等等,读取出来后给每个Item赋值。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值