본문 바로가기
Unity/Metaverse Store

[Metaverse Store] 설명 및 기능도 (운세, 뽑기시스템)

by 으얏 2023. 1. 6.

1편 : https://stotop.tistory.com/8

 

[Metaverse Store] 설명 및 기능 정리 1

VR을 이용한 Metaverse Store를 만들었습니다. 저의 노션에서 간단한 기획서 및 기능도를 보실 수 있습니다. https://www.notion.so/stotop/Metaverse-Smart-Store-22d8a4d8745b42229349b9b22fbc5b80 완성 및 G-Star 참여 영상입

stotop.tistory.com

2편 : https://stotop.tistory.com/9

 

[Metaverse Store] 설명 및 기능 정리 2

2. Sever Scene 2 - 1 전체보기. Intro 씬에서 회원가입 및 로그인을 완료하면 오게 되는 두번째 씬 입니다. 상점과 광안리 밤바다를 구경할 수 있게 꾸몄습니다. 2 - 2 방 생성 및 입장. LobbyCount.cs 입니다

stotop.tistory.com

3편 : https://stotop.tistory.com/10

 

[Metaverse Store] 설명 및 기능 정리 3 (결제 시스템)

1편 : https://stotop.tistory.com/8 [Metaverse Store] 설명 및 기능 정리 1 VR을 이용한 Metaverse Store를 만들었습니다. 저의 노션에서 간단한 기획서 및 기능도를 보실 수 있습니다. https://www.notion.so/stotop/Metaverse

stotop.tistory.com

 

4. 오락실방에 있는 운세, 뽑기 시스템입니다.

스크립트 요점 :

G-star 참여도를 높히기 위해서 두 가지의 참여 시스템을 만들었습니다.

1. 16가지의 MBTI를 case별로 분류하고 각 MBTI를 클릭시 오늘의 운세를 볼 수 있게 하였습니다.

2. 뽑기기계를 만들고 클릭시 랜덤으로 상품을 증정할 수 있게 하였습니다.

MBTI Manager 스크립트 입니다.

using UnityEngine;
using TMPro;

public class MBTIManager : MonoBehaviour
{
    public TMP_Text MBTItext;

    void Update()
    {
        switch (Data.count)
        {
            case 0:
                MBTItext.text = "ISTJ의 오늘의 운세";
                break;
            case 1:
                MBTItext.text = "ISFJ의 오늘의 운세";
                break;
            case 2:
                MBTItext.text = "INFJ의 오늘의 운세";
                break;
            case 3:
                MBTItext.text = "INTJ의 오늘의 운세";
                break;
            case 4:
                MBTItext.text = "ISTP의 오늘의 운세";
                break;
            case 5:
                MBTItext.text = "ISFP의 오늘의 운세";
                break;
            case 6:
                MBTItext.text = "INFP의 오늘의 운세";
                break;
            case 7:
                MBTItext.text = "INTP의 오늘의 운세";
                break;
            case 8:
                MBTItext.text = "ESTP의 오늘의 운세";
                break;
            case 9:
                MBTItext.text = "ESFP의 오늘의 운세";
                break;
            case 10:
                MBTItext.text = "ENFP의 오늘의 운세";
                break;
            case 11:
                MBTItext.text = "ENTP의 오늘의 운세";
                break;
            case 12:
                MBTItext.text = "ESTJ의 오늘의 운세";
                break;
            case 13:
                MBTItext.text = "ESFJ의 오늘의 운세";
                break;
            case 14:
                MBTItext.text = "ENFJ의 오늘의 운세";
                break;
            case 15:
                MBTItext.text = "ENTJ의 오늘의 운세";
                break;
        }
    }
}

 

MBTI 운세 스크립트 입니다.

string으로 운세를 적어놓고 어떤 성격을 고르게 되어도 랜덤으로 하나의 운세가 나옵니다.

using UnityEngine;
using TMPro;

public class MBTILuck : MonoBehaviour
{
    string[] luck =
    {
    	(예시)
        "일찍 귀가하여 자기 자신을 지키라.",
        "주변과 서로 신뢰를 쌓으라.",
        "뻔히 알면서도 빼앗기니 서글픈 하루이다.",
        "어려움 중에 소중한 것을 얻을 것이다.",
        "자신의 맡은 일에 최선을 다하는 전문가가 되어라.",
        "지금하지 못하면 진행을 못 할 수 있으니 강력히 추진하라."
    };
    [SerializeField]
    TMP_Text text;

    System.Random ran;
    void Start()
    {
        ran = new System.Random();
    }   

    public void Luck()
    {
        int num = ran.Next(luck.Length);
        text.text = luck[num];
    }
}

뽑기 스크립트 입니다.

클릭시 파티클효과를 추가하여 코루틴으로 관리하였습니다.

뽑기를 한번 클릭시 끝날때까지 버튼을 클릭할 수 없게 만들어 놓았습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class GachaManager : MonoBehaviour
{
    System.Random ran;
    [SerializeField] GameObject light;
    public GameObject spawnPos;
    [SerializeField] TMP_Text text;
    [SerializeField] Animation anim;
    [SerializeField] CanvasGroup cg;
    [SerializeField] ParticleSystem part;
    bool click = true;

    string[] gift =
    {
        (예시)
        "토끼",
        "고양이",
        "강아지",
        "개구리",
        "판다"
    };

    void Start()
    {
        ran = new System.Random();
        light.SetActive(false);
        cg.alpha = 0;
    }

    public void GachaClick()
    {
        StartCoroutine(Timer());
        click = false;
    }

    public void Luck()
    {
        int num = ran.Next(gift.Length);
        text.text = gift[num];

        float time = 0;
        while (time <= 1)
        {
            time += (Time.unscaledDeltaTime / 10000);
            cg.alpha = Mathf.Lerp(0f, 1.0f, time);
        }             
    }

    private IEnumerator Timer()
    {
        if(click)
        {
            light.SetActive(true);
            anim.Play();
            part.Play();

            yield return new WaitForSeconds(2.5f);

            Luck();
            yield return new WaitForSeconds(3.0f);

            text.text = "";
            click = true;
        }     
    }
}

 

댓글