본 게시글은 고라니TV님의 하스스톤 유니티 튜토리얼을 보고 만든 게시물입니다. 빠른 코딩을 원하시는 분들은 아래 링크를 보고 클론코딩 하시면 됩니다.
https://youtube.com/playlist?list=PL3KKSXoBRRW0RVfemPWsfg9uLIjxyRHjN&feature=shared
유니티 하스스톤
www.youtube.com
5장 아이템 버퍼에서 아이템 뽑기
5.1 카드 매니저
5.1.1 카드 매니저 오브젝트 및 스크립트 생성
① Hierarchy 창에서 CreateEmpty 클릭, 이름을 CardManager로 변경
② Inspector창에서 Transform 오른쪽 버튼 클릭 -> Reset
③ Scripts 폴더에서 마우스 오른쪽 버튼 클릭 -> Create -> C# Script 클릭, Script 이름을 CardManager로 변경
④ CardManager 스크립트를 CardManager 오브젝트에 드래그 앤 드롭하여 적용시킵니다.
⑤ CardManager 스크립트 코드 작성
⑥ CardManager 스크립트의 ItemSO 변수에 ItemSO 오브젝트를 드래그 앤 드롭하여 적용시킨다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CardManager : MonoBehaviour {
public static CardManager Inst { get; private set; } // 매니저는 하나만 존재하기 때문에 싱글톤으로 선언.
void Awake() => Inst = this;
[SerializeField] ItemSO itemSO;
List<Item> itemBuffer;
void SetupItemBuffer() {
itemBuffer = new List<Item>();
for(int i = 0; i < itemSO.items.Length; i++) { // item 배열에 담겨있는 10개의 카드
Item item = itemSO.items[i]; // 10개의 카드를 가져온다.
for(int j = 0; j < item.percent; j++) { // 각각의 카드만큼의 퍼센트 만큼 반복시킨다
itemBuffer.Add(item); // 총 100장의 카드가 들어가며 각가의 카드 갯수는 각 카드의 퍼센트만큼 들어간다.
}
}
for(int i = 0; i < itemBuffer.Count; i++) { // 순서대로 들어가있는 카드를 랜덤하게 섞어준다.
int rand = Random.Range(i, itemBuffer.Count);
Item temp = itemBuffer[i];
itemBuffer[i] = itemBuffer[rand];
itemBuffer[rand] = temp;
}
}
void Start() {
SetupItemBuffer();
}
}
5.1.2 카드 매니저 아이템 버퍼 확인하기
① 플레이 버튼을 누른 후 Inspector 창 -> 오른쪽 위 점 3개 클릭 -> Debug 클릭
② Inspector창 -> Card Manager 스크립트 -> ItemBuffer를 확인
5.2 카드 뽑기 기능 구현
현재 카드를 버퍼에 넣고 카드를 랜덤하게 생성하는 기능까진 구현했습니다. 이번엔 카드를 뽑는 기능을 CardManager에 추가해보도록 하겠습니다.
5.2.1 PopItem() 메서드 구현
① CardManager 스크립트 코드에 PopItem() 메서드를 추가하여 수정합니다.
② 플레이하여 키패드 1번을 눌러 카드가 잘 뽑히는지 Console을 확인합니다.
(100장 이상 뽑아 다시 자동으로 카드가 버퍼에 채워지는지 확인합니다.)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CardManager : MonoBehaviour {
public static CardManager Inst { get; private set; } // 매니저는 하나만 존재하기 때문에 싱글톤으로 선언.
void Awake() => Inst = this;
[SerializeField] ItemSO itemSO;
List<Item> itemBuffer;
public Item PopItem() {
if (itemBuffer.Count == 0) { // 만약 카드를 다 뽑아 버퍼가 가지고 있는 카드의 갯수가 0개가 되면
SetupItemBuffer(); // 다시 새로 버퍼에 100장의 카드를 셋팅
}
Item item = itemBuffer[0]; // 버퍼 맨 앞에 있는 카드를 뽑는다.
itemBuffer.RemoveAt(0); // 뽑은 카드를 버퍼에서 지운다.
return item; // 카드를 뽑아낸다.
}
void SetupItemBuffer() {
...
}
void Start() {
...
}
void Update() {
if(Input.GetKeyDown(KeyCode.Keypad1)) { // 만약 1번 키를 누르면
print(PopItem().name);
}
}
}
다음 시간엔 Card 오브젝트를 스폰을 하기 위한 Card 스크립트를 작성해보도록 하겠습니다.
'유니티 > 고라니TV' 카테고리의 다른 글
[유니티] 하스스톤 유니티 튜토리얼 #6 - 카드 기능 구현 (0) | 2024.02.05 |
---|---|
[유니티] 하스스톤 유니티 튜토리얼 #4 - 카드 꾸미기 (0) | 2024.01.19 |
[유니티] 하스스톤 유니티 튜토리얼 #3 - 배경 및 플레이어 만들기 (0) | 2024.01.18 |
[유니티] 하스스톤 유니티 튜토리얼 #2 - 캐릭터 카드 세팅 (0) | 2024.01.12 |
[유니티] 하스스톤 유니티 튜토리얼 #1 - 환경세팅 (1) | 2024.01.05 |