강의/[Unity]방치형 게임 만들기

유니티 방치형 게임 만들기 - 5. 스킬뽑기 시스템

개발의 피 2024. 9. 12. 12:33

https://www.inflearn.com/course/%EB%B0%A9%EC%B9%98%ED%98%95-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0/dashboard

 

유니티 방치형 게임 만들기 강의 | 코사트 - 인프런

코사트 | C# 및 게임 엔진 Unity(유니티)를 활용해 방치형 게임을 만드는 방법을 배웁니다., 유니티와 C#으로 따라 만드는 방치형 인디 게임 만들기! 수강 전 참고사항 녹음 환경의 문제로 음질이 고

www.inflearn.com

 

강의 : 유니티 방치형 게임 만들기 

섹션 5. 스킬뽑기 시스템 

1. 버튼 및 패널UI 구성
2. 스킬 UI 및 프리팹 구성
3. 스킬 클래스
4. 랜덤 시스템
5. 랜덤 뽑기
6. 뽑기 버튼 정리

 

* 내가 정리해본 클래스 다이어그램 

 

* 클래스 정리

1) Skill

스킬이라는 오브젝트에 정보 담는 용도 

 주의 : [System.Serializable] 까먹지 않기 (가 있어야 내용을 볼 수가 있음) 

 

2) SkillUI

Skill 객체의 정보를 받아 UI로 표현 

 

3) RandomSelect

인상깊었던 것 : 코루틴 처리 (동시 실행 방지)

코루틴을 변수에 담아두고 null 체크를 한다...? 

처음엔 이해 못했는데 코루틴을 시작하고 변수(sc)에 저장해서, 코루틴의 실행 상태를 추적하는 것이었다 

- sc != null : 코루틴이 현재 실행 중 (= 새로운 코루틴 시작/중복 실행 x) 

- sc == null : 새로운 코루틴 실행 가능 상태  

 

public void RandomStart()
    {
        // 코루틴이 돌고 있을 때 : x
        // -> 현재 실행 중인 코루틴이 없을 때만 새 코루틴 시작 
        if (sc == null)
        {
            // 1. 기존 스킬 오브젝트 - 지워주기
            for (int i = 0; i < skillOb.Count; i++)
            {
                Destroy(skillOb[i]);
            }
            result.Clear(); // 2. 결과 리스트 비우기 

            // 3. 코루틴 돌리는 작업 (새로운 랜덤 선택 프로세스 시작)
            sc = StartCoroutine("ResultSelect"); 
        }
        // 코루틴이 이미 실행 중인 경우 (sc != null), 아무 작업도 수행하지 x
    }
    
    
 // 섞는 함수
    IEnumerator ResultSelect()
    {
        // 20개 만들어서 돌리기
        for (int i = 0; i < 20; i++)
        {
            // 1. RandomCard 결과, result에 추가
            result.Add(RandomCard());
            
            // 2. 비어있는 카드 생성
            GameObject skillUI = Instantiate(skillPrefab, parent);
            // 3. 생성된 카드에 리스트 정보 넣어주기 
            skillUI.GetComponent<SkillUI>().CardUISet(result[i]);
            // 4. 스킬 오브젝트 담아두기 (처음에 비워줄 때 사용)
            skillOb.Add(skillUI);
            // 5. 각 반복 사이 대기 시간 (= 카드 하나씩 생성) 
            yield return new WaitForSeconds(0.2f);
        }

	    // 코루틴이 끝나면, sc를 다시 null로 설정 
        sc = null; // null일 때 다음 실행 가능 (= 새로운 코루틴 시작할 수 있는 상태)
    }

 

* 스킬 덱 애니메이션

back (검정 이미지 알파값 : 1 -> 알파값 : 0)

 

 

스킬 뽑기 버튼을 누르면, 스킬 뽑기 패널이 활성화 되고

패널에서 스킬 뽑기 버튼을 누르면, 설정된 가중치에 따라 스킬이 랜덤으로 뽑히고 (뽑는 과정 중에는 뽑기 실행 x)

닫기 버튼을 누르면 스킬 뽑는 패널 비활성화 !