Unity 의 주마등 추첨 효과 단일 추첨 및 연속 추첨(데모 첨부)
효과 도
1 회 추첨 효과
애니메이션 추첨 효과 건 너 뛰 기
3 연속 추첨 효과
디자인 사고 버튼 을 누 르 면 수요(확률)에 따라 이번 추첨 에서 아 이 템 시 뮬 레이 션 회전(가속 후 감속)을 얻 을 수 있 습 니 다.일정 시간 후에 추첨 을 중단 한 상황 에서 모든 상품 애니메이션 이 완성 되 어야 애니메이션 디자인 을 건 너 뛰 고 건 너 뛸 때 추첨 속도 가 최대 에 달 하 며 당 첨 가능 한 장면 에 들 어가 서 구축 할 수 있 습 니 다.
하나의 버튼,한 조 의 상품 을 아버지 물체 에 올 려 놓 습 니 다.
상품 요 소 는 두 가지 상태,하 나 는 회전 상태,하 나 는 당 첨 상태 입 니 다.
코드
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
///
/// </summary>
public class RotaryTablePanel : MonoBehaviour
{
//
private Action<bool> PlayingAction;
//
private Action<bool> PlayingThreeAction;
//
bool isThreeDraw;
// ,
public Button drawBtn;
//
public Toggle jumpTgl;
//
public Transform rewardImgTran;
//
public Transform eff_TurnFrame;
//
public Transform eff_SelectFrame;
//
private Transform[] rewardTransArr;
private RotaryCell[] rewardCellArr;
//
private bool isInitState;
// -- ,
private bool drawEnd;
//
private bool drawWinning;
[Header(" --> ")]
public float setrewardTime = 1f;
private float rewardTime;
private float rewardTiming = 0;
//
private int haloIndex = 0;
// ID
private int rewardIndex = 0;
//
private bool isOnClickPlaying;
public bool IsOnClickPlaying
{
get => isOnClickPlaying;
set
{
isOnClickPlaying = value;
if (eff_TurnFrame != null)
{
eff_TurnFrame.gameObject.SetActive(isOnClickPlaying);
}
}
}
public bool DrawWinning
{
get => drawWinning;
set => drawWinning = value;
}
public bool DrawEnd
{
get => drawEnd;
set
{
drawEnd = value;
if (eff_SelectFrame != null)
{
eff_SelectFrame.gameObject.SetActive(drawEnd);
}
}
}
/// <summary>
///
/// </summary>
/// <param name="playingAction"></param>
public void SetPlayingAction(Action<bool> playingAction, Action<bool> playingThreeAction)
{
PlayingAction = playingAction;
PlayingThreeAction = playingThreeAction;
}
public void Start()
{
Init();
}
public void Init()
{
drawBtn.onClick.AddListener(OnClickDrawFun);
rewardTransArr = new Transform[rewardImgTran.childCount];
rewardCellArr = new RotaryCell[rewardImgTran.childCount];
for (int i = 0; i < rewardImgTran.childCount; i++)
{
rewardTransArr[i] = rewardImgTran.GetChild(i);
rewardCellArr[i] = rewardTransArr[i].GetComponent<RotaryCell>();
}
//
rewardTime = setrewardTime;
rewardTiming = 0;
DrawEnd = false;
DrawWinning = false;
IsOnClickPlaying = false;
}
public void RePrepare()
{
if (IsOnClickPlaying)
{
return;
}
rewardTime = setrewardTime;
rewardTiming = 0;
DrawEnd = false;
DrawWinning = false;
IsOnClickPlaying = false;
if (true)
{
for (int i = 0; i < rewardCellArr.Length; i++)
{
rewardCellArr[i].ShowEff(RotaryCell.EffType.all, false);
}
}
}
/// <summary>
///
/// </summary>
/// <param name="index"></param>
public void RestoreDefault(int index = 0)
{
index--;
rewardCellArr[index].ShowEff(RotaryCell.EffType.all, false);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.F))
{
RePrepare();
}
if (Input.GetKeyDown(KeyCode.H))
{
OnClickDrawFunThree();
}
if (DrawEnd || rewardCellArr == null) return;
if (!IsOnClickPlaying)
{
return;
}
//
rewardTiming += Time.deltaTime;
if (rewardTiming >= rewardTime)
{
rewardTiming = 0;
haloIndex++;
if (haloIndex >= rewardCellArr.Length)
{
haloIndex = 0;
}
if (isThreeDraw)
SetHaloThreePos(haloIndex);
else
SetHaloPos(haloIndex);
}
}
//
void SetHaloPos(int index)
{
rewardCellArr[index - 1 < 0 ? rewardCellArr.Length - 1 : index - 1].ShowEff(RotaryCell.EffType.turn, false);
rewardCellArr[index].ShowEff(RotaryCell.EffType.turn, true);
// && ID == ID
if (DrawWinning && index == rewardIndex)
{
rewardCellArr[index].ShowEff(RotaryCell.EffType.select, true);
rewardCellArr[index].ShowEff(RotaryCell.EffType.turn, false);
IsOnClickPlaying = false;
DrawEnd = true;
if (PlayingAction != null)
{
PlayingAction(false);
}
//todo... , --> : index
Debug.Log(" , :" + index + " ");
}
}
void SetHaloThreePos(int index)
{
rewardCellArr[index - 1 < 0 ? rewardCellArr.Length - 1 : index - 1].ShowEff(RotaryCell.EffType.turn, false);
rewardCellArr[index].ShowEff(RotaryCell.EffType.turn, true);
// && ID == ID
if (DrawWinning && index == indexList.Peek())
{
rewardCellArr[index].GetComponent<RotaryCell>().ShowEff(RotaryCell.EffType.select, true);
rewardCellArr[index].GetComponent<RotaryCell>().ShowEff(RotaryCell.EffType.turn, false);
indexList.Dequeue();
//todo... , --> : index
Debug.Log(" , :" + index + " ");
if (indexList.Count == 0)
{
if (PlayingThreeAction != null)
{
PlayingThreeAction(false);
}
IsOnClickPlaying = false;
DrawEnd = true;
isThreeDraw = false;
return;
}
if (jumpTgl != null && jumpTgl.isOn)
{
rewardTime = 0.02f;
DrawWinning = true;
}
else
{
rewardTime = setrewardTime;
rewardTiming = 0;
DrawWinning = false;
StartCoroutine(StartDrawAni());
}
}
}
//
void OnClickDrawFun()
{
if (!IsOnClickPlaying)
{
haloIndex = -1;
RePrepare();
// ID
rewardIndex = UnityEngine.Random.Range(0, rewardCellArr.Length);
Debug.Log(" , ID :" + rewardIndex);
IsOnClickPlaying = true;
DrawEnd = false;
DrawWinning = false;
if (PlayingAction != null)
{
PlayingAction(true);
}
if (jumpTgl != null && jumpTgl.isOn)
{
rewardTime = 0.02f;
DrawWinning = true;
}
else
StartCoroutine(StartDrawAni());
}
}
//
public void OnClickDrawFun(int index)
{
haloIndex = -1;
isThreeDraw = false;
rewardIndex = index - 1;// lua , 1
if (!IsOnClickPlaying)
{
RePrepare();
Debug.Log(" , ID :" + rewardIndex);
IsOnClickPlaying = true;
DrawEnd = false;
DrawWinning = false;
if (PlayingAction != null)
{
PlayingAction(true);
}
if (jumpTgl != null && jumpTgl.isOn)
{
rewardTime = 0.02f;
DrawWinning = true;
}
else
StartCoroutine(StartDrawAni());
}
}
Queue<int> indexList = new Queue<int>();
public void OnClickDrawFunThree(Queue<int> _table)
{
haloIndex = -1;
isThreeDraw = true;
if (!IsOnClickPlaying)
{
RePrepare();
IsOnClickPlaying = true;
DrawEnd = false;
DrawWinning = false;
if (PlayingThreeAction != null)
{
PlayingThreeAction(true);
}
if (jumpTgl != null && jumpTgl.isOn)
{
rewardTime = 0.02f;
DrawWinning = true;
}
else
StartCoroutine(StartDrawAni());
}
}
public void OnClickDrawFunThree()
{
haloIndex = -1;
isThreeDraw = true;
indexList.Enqueue(3);
indexList.Enqueue(7);
indexList.Enqueue(5);
//rewardIndex = indexList.Peek();
if (!IsOnClickPlaying)
{
RePrepare();
IsOnClickPlaying = true;
DrawEnd = false;
DrawWinning = false;
if (PlayingThreeAction != null)
{
PlayingThreeAction(true);
}
if (jumpTgl != null && jumpTgl.isOn)
{
rewardTime = 0.02f;
DrawWinning = true;
}
else
StartCoroutine(StartDrawAni());
}
}
/// <summary>
///
/// --
/// </summary>
/// <returns></returns>
IEnumerator StartDrawAni()
{
rewardTime = setrewardTime;
//
for (int i = 0; i < setrewardTime / 0.05f - 1; i++)
{
yield return new WaitForSeconds(0.05f);
rewardTime -= 0.05f;
}
yield return new WaitForSeconds(2f);
//
for (int i = 0; i < setrewardTime / 0.05f - 4; i++)
{
yield return new WaitForSeconds(0.05f);
rewardTime += 0.02f;
}
yield return new WaitForSeconds(0.5f);
DrawWinning = true;
}
public void OnDestroy()
{
Debug.Log("C# ");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotaryCell : MonoBehaviour
{
public Transform[] turnEff;
public Transform[] seletEff;
public enum EffType
{
turn,
select,
all,
}
public void ShowEff(EffType efftype, bool isShow)
{
switch (efftype)
{
case EffType.turn:
for (int i = 0; i < turnEff.Length; i++)
{
turnEff[i].gameObject.SetActive(isShow);
}
break;
case EffType.select:
for (int i = 0; i < turnEff.Length; i++)
{
seletEff[i].gameObject.SetActive(isShow);
}
break;
case EffType.all:
for (int i = 0; i < turnEff.Length; i++)
{
turnEff[i].gameObject.SetActive(isShow);
seletEff[i].gameObject.SetActive(isShow);
}
break;
default:
break;
}
}
public void HideAllEff()
{
for (int i = 0; i < turnEff.Length; i++)
{
turnEff[i].gameObject.SetActive(false);
}
for (int i = 0; i < turnEff.Length; i++)
{
seletEff[i].gameObject.SetActive(false);
}
}
IEnumerator HideEffAni()
{
yield return new WaitForSeconds(0.1f);
for (int i = 0; i < turnEff.Length; i++)
{
turnEff[i].gameObject.SetActive(false);
}
}
}
프로젝트다운로드 주소
유 니 티 의 주마등 추첨 효과 리스트 추첨 과 연속 추첨(데모 첨부)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 유 니 티 주마등 추첨 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 읽 어 주시 기 바 랍 니 다.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
photonnetwork.instantiate에서 gamepobject 유형을 생성 한 다음 상태 및 값을 참조하는 방법주로 마지막 기사에서 일어난 일의 수정입니다. 지난번↓ 그럼 주제입니다. (타이틀이 정리되어 없어서 죄송합니다) 우선 전회의 Illegal view ID:0입니다만 photonnetwork.instantiate를 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.