UNITY_C#

유니티_가위바위보 게임

쫑나리 2023. 9. 20. 17:19
728x90
반응형
SMALL

과제 1. GUI를 UGUI로 변경해보기 !!

우선 결과물 먼저

 

가위바위보 스크립트를 만들어주고 캐릭터에 넣어준다.

이럴 때 switch case문을 적극 활용합니다!!

그런데말입니다. GUI는 거의 쓰지 않는다고 합니다.

UGUI(무료) 와 서드파티인 NGUI(유료 95$)를 많이 사용한다고합니다.

지금 테스트 해보기 위해서 GUI로 했다는 점!

아래 코드는 사운드와 UI를 뺀 기능만 담겨있습니다.

public class RockScissorsPaper : MonoBehaviour
{
    bool flagJanken = false;    //묵찌빠 시작 플래그
    int modeJanken = 0; // 게임 모드
//상수로 케이스들을 정의해두고
    const int JANKEN = -1;
    const int GOO = 0;
    const int CHOKI = 1;
    const int PAR = 2;
    const int DRAW = 3;
    const int WIN = 4;
    const int LOOSE = 5;
//애니메이터를 사용
    private Animator animator;
//가위바위보를 위해    
    int myHand;
    int unityHand;
    int flagResult;
    int[,] tableResult = new int[3, 3];
    float waitDelay;



    private void OnGUI()
    {
        if (!flagJanken)        //묵찌빠가 아니면
        {   //UI에 게임 버튼 추가
            flagJanken = (GUI.Button(new Rect(10, Screen.height - 110, 100, 100), "묵찌빠"));
        }
        // 묵찌빠 모드
        if (modeJanken == 1)
        {
            // UI에 게임 버튼 추가
            if (GUI.Button(new Rect(Screen.width / 2 - 50 - 120, Screen.height - 110, 100, 100), "묵"))
            {
                myHand = GOO;
                modeJanken++;
            }
            if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height - 110, 100, 100), "찌"))
            {
                myHand = CHOKI;
                modeJanken++;
            }
            if (GUI.Button(new Rect(Screen.width / 2 - 50 + 120, Screen.height - 110, 100, 100), "빠"))
            {
                myHand = PAR;
                modeJanken++;
            }
        }

    }

    // Start is called before the first frame update
    void Start()
    {
        animator = GetComponent<Animator>();
        univoice = GetComponent<AudioSource>();
        // 결과 테이블 미리 결정 [유니티짱, 플레이어]
        tableResult[GOO, GOO] = DRAW;
        tableResult[GOO, CHOKI] = WIN;
        tableResult[GOO, PAR] = LOOSE;
        tableResult[CHOKI, GOO] = LOOSE;
        tableResult[CHOKI, CHOKI] = DRAW;
        tableResult[CHOKI, PAR] = WIN;
        tableResult[PAR, GOO] = WIN;
        tableResult[PAR, CHOKI] = LOOSE;
        tableResult[PAR, PAR] = DRAW;
    }

    // Update is called once per frame
    void Update()
    {
        // 묵찌빠 상태이면
        if (flagJanken)
        {
            // 게임 모드에 따라
            switch (modeJanken)
            {
                case 0: // 묵찌빠 시작
                    UnityChanAction(JANKEN);
                    modeJanken++;
                    break;
                case 1: // 플레이어 입력 대기
                        //애니메이션 초기화
                    animator.SetBool("Janken", false);
                    animator.SetBool("Aiko", false);
                    animator.SetBool("Goo", false);
                    animator.SetBool("Choki", false);
                    animator.SetBool("Par", false);
                    animator.SetBool("Win", false);
                    animator.SetBool("Loose", false);
                    break;
                case 2: // 판정
                    flagResult = JANKEN;
                    // 유니티짱의 손을 무작위로 선택
                    unityHand = Random.Range(GOO, PAR + 1);
                    // 유니티짱 액션
                    UnityChanAction(unityHand);
                    // 결과
                    flagResult = tableResult[unityHand, myHand];
                    modeJanken++;

                    break;
                case 3: // 결과
                        // 약간의 시간 간격
                    waitDelay += Time.deltaTime;
                    if (waitDelay > 1.5f)
                    {
                        // 유니티짱 결과 액션
                        UnityChanAction(flagResult);
                        waitDelay = 0;
                        modeJanken++;
                    }
                    break;
                default: // 초기화
                    flagJanken = false;
                    modeJanken = 0;
                    break;
            }
        }
        // 유니티짱의 액션
        void UnityChanAction(int act) // 이벤트 함수
        {
            switch (act)
            {
                case JANKEN:
                    animator.SetBool("Janken", true);
                    break;
                case GOO:
                    animator.SetBool("Goo", true);
                    break;
                case CHOKI:
                    animator.SetBool("Choki", true);
                    break;
                case PAR:
                    animator.SetBool("Par", true);
                    break;
                case DRAW:
                    animator.SetBool("Aiko", true);
                    break;
                case WIN:
                    animator.SetBool("Win", true);
                    break;
                case LOOSE:
                    animator.SetBool("Loose", true);
                    break;
            }
        }
    }
}

아주 귀엽습니다.. 귀여워요

728x90
반응형
LIST