Unity實(shí)現(xiàn)老虎機(jī)滾動(dòng)抽獎(jiǎng)效果的示例代碼
直接看下效果圖吧:

制作思路:
設(shè)計(jì)四張圖片,五個(gè)點(diǎn),每個(gè)圖片同時(shí)向下一個(gè)點(diǎn)移動(dòng),到最后一個(gè)就回到0號(hào)點(diǎn),以此循環(huán)。

場(chǎng)景搭建:
- 創(chuàng)建Image命名為Bg作為電視框背景;
- 創(chuàng)建Image命名Mask并添加Mask組件作為電視框內(nèi)容顯示遮罩框;
- 創(chuàng)建四個(gè)Image作為滾動(dòng)圖片;
- 創(chuàng)建開始抽獎(jiǎng)按鈕;

PS:實(shí)際項(xiàng)目中可以根據(jù)需求來動(dòng)態(tài)修改圖片顯示,以達(dá)到的控制每次抽獎(jiǎng)獎(jiǎng)品內(nèi)容。
源碼分享:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class ScollToDraw : MonoBehaviour
{
// 抽獎(jiǎng)按鈕
public Button DrowBtn;
// 獎(jiǎng)勵(lì)圖片
public Image[] ArardImgArr;
// 轉(zhuǎn)盤速度
public float AniMoveSpeed = 3f;
// 進(jìn)度
private float[] progress = new[] {0f, 1f, 2f, 3f, 4f};
// 轉(zhuǎn)動(dòng)動(dòng)畫位置
private Vector3[] AniPosV3 = new[]
{Vector3.up * 240, Vector3.up * 120, Vector3.zero, Vector3.down * 120, Vector3.down * 240};
// 自動(dòng)暫停標(biāo)識(shí)
private bool isAutoStop;
// 抽獎(jiǎng)結(jié)束 停止刷新界面UI
private bool isStopUpdatePos;
void Start()
{
DrowBtn.onClick.AddListener(DrawFun);
isAutoStop = false;
isStopUpdatePos = false;
}
void Update()
{
if (isStopUpdatePos) return;
float t = Time.deltaTime * AniMoveSpeed;
for (int i = 0; i < ArardImgArr.Length; i++)
{
progress[i] += t;
ArardImgArr[i].transform.localPosition = MovePosition(i);
}
}
// 獲取下一個(gè)移動(dòng)到的位置
Vector3 MovePosition(int i)
{
int index = Mathf.FloorToInt(progress[i]);
if (index > AniPosV3.Length - 2)
{
//保留其小數(shù)部分,不能直接賦值為0
progress[i] -= index;
index = 0;
// 索引為2的到底了,索引為0的就在正中心
if (i == 2 && isAutoStop)
{
isStopUpdatePos = true;
Debug.Log("展示獎(jiǎng)勵(lì)界面...");
// todo...獲取獎(jiǎng)勵(lì)數(shù)據(jù)維護(hù)
}
return AniPosV3[index];
}
else
{
return Vector3.Lerp(AniPosV3[index], AniPosV3[index + 1], progress[i] - index);
}
}
/// <summary>
/// 點(diǎn)擊抽獎(jiǎng)
/// </summary>
void DrawFun()
{
isAutoStop = false;
isStopUpdatePos = false;
StartCoroutine(SetMoveSpeed(2));
// DoTween 按鈕下拉動(dòng)畫
// Transform tran = DrowBtn.transform;
//tran.DOLocalMoveY(-60, 0.2f).OnComplete(() =>
//{
// tran.DOLocalMoveY(50, 0.2f);
//
//});
}
// 抽獎(jiǎng)動(dòng)畫速度控制
IEnumerator SetMoveSpeed(int time)
{
AniMoveSpeed = 10;
yield return new WaitForSeconds(time);
AniMoveSpeed = 1;
yield return new WaitForSeconds(time);
isAutoStop = true;
}
}
到此這篇關(guān)于Unity實(shí)現(xiàn)老虎機(jī)滾動(dòng)抽獎(jiǎng)效果的示例代碼的文章就介紹到這了,更多相關(guān)Unity老虎機(jī)滾動(dòng)抽獎(jiǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)數(shù)組元素的數(shù)據(jù)類型轉(zhuǎn)換方法詳解
這篇文章主要為大家介紹了C#中一維數(shù)組如何快速實(shí)現(xiàn)數(shù)組元素的數(shù)據(jù)類型的轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-04-04
C#實(shí)現(xiàn)百度網(wǎng)站收錄和排名查詢功能思路及實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)百度網(wǎng)站收錄和排名查詢功能思路及實(shí)例,本文思路同樣適用必應(yīng)、搜狗、搜搜、360等搜索引擎,需要的朋友可以參考下2015-01-01
C#使用位域技術(shù)進(jìn)行對(duì)象二進(jìn)制序列化優(yōu)
在操作系統(tǒng)中,進(jìn)程信息對(duì)于系統(tǒng)監(jiān)控和性能分析至關(guān)重要,這個(gè)過程中,如何將捕獲到的進(jìn)程對(duì)象轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),并進(jìn)行優(yōu)化,以減小數(shù)據(jù)包的大小,成為了一個(gè)關(guān)鍵問題,下面我們就來看看如何使用位域技術(shù)對(duì)C#對(duì)象進(jìn)行二進(jìn)制序列化優(yōu)化吧2024-01-01
WPF實(shí)現(xiàn)動(dòng)畫效果(五)之關(guān)鍵幀動(dòng)畫
這篇文章介紹了WPF實(shí)現(xiàn)動(dòng)畫效果之關(guān)鍵幀動(dòng)畫,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
C#使用Selenium+PhantomJS抓取數(shù)據(jù)
本文主要介紹了C#使用Selenium+PhantomJS抓取數(shù)據(jù)的方法步驟,具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02
C# 通過NI-VISA操作Tektronix TBS 2000B系列示波器的實(shí)現(xiàn)步驟
這篇文章主要介紹了C# 通過NI-VISA操作Tektronix TBS 2000B系列示波器的實(shí)現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-02-02
C# 三種方式實(shí)現(xiàn)Socket數(shù)據(jù)接收
這篇文章主要給大家分享三種實(shí)現(xiàn)C# 實(shí)現(xiàn)Socket數(shù)據(jù)接收的方式,接下倆小編就來為大家詳細(xì)介紹吧,需要的朋友可以參考一下2021-10-10

