-
5주차 - Quest 만들기Unity/Unity 스파르타 2024. 1. 15. 20:31728x90
순서
- 퀘스트 클래스 만들기
- 퀘스트 만들기
1. 퀘스트 클래스 만들기
- 퀘스트마다 공통적으로 가지고있는 변수들을 만들고 필수 메서드를 virtual 로 만들어 퀘스트마다 오버라이딩을 해준뒤에 상속시켜 퀘스트를 만들 것 입니다.
- ShowQuestInfo - 퀘스트 정보를 보여주는 메서드
- Reset - 퀘스트 포기를 했을시 또는 반복 퀘스트의 경우 퀘스트 진행도를 초기화 시기는 메서드
- CheckCondition - 퀘스트 클리어 조건을 충족하는지 확인하는 메서드
- CheckCondition(string targetName) - 퀘스트 클리어 조건 충족하는지 확인하는 오버로딩 메서드
- Clear - 퀘스트 클리어시 실행할 메서드
- ClearInfo - 퀘스트 클리어시 보여줄 UI
public enum QuestState { REQUIRE_ACHIEVED, NOT_REQUIRE_ACHIEVED, PROGRESS, FINISH, CLEAR } public class Quest { public int id; public int requireLevel; public string questName = ""; public string questInfo = ""; public QuestState questState; public int rewardGold; public virtual void ShowQuestInfo() { } public virtual void Reset() { } public virtual void CheckCondition() { } public virtual void CheckCondition() {string targetName } public virtual void Clear() { questState = QuestState.CLEAR; ClearInfo(); } public virtual void ClearInfo() { Console.Clear(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("퀘스트를 완료했습니다!!"); Console.WriteLine(); Console.WriteLine(); Console.Write(questName); Console.WriteLine(); Utill.WriteGreenText("퀘스트 보상!"); Console.WriteLine(); Console.WriteLine($"{rewardGold} G"); Console.WriteLine(); Console.WriteLine(); Utill.WriteGreenText("PRESS THE ENTER"); Console.ReadLine(); } public void SetQuest(int id,string name,int gold) { this.id = id; questName = name; rewardGold = gold; questState = QuestState.NOT_REQUIRE_ACHIEVED; } }
2. 퀘스트 만들기
- 몬스터를 잡아오는 퀘스트를 만들 것 입니다.
- 위에서 만든 퀘스트 클래스를 상속 받고, 필요한 변수를 추가로 만들어 줍니다.
- 퀘스트의 기본 정보를 먼저 초기화 시켜주고 메서드를 작성합니다.
- 몬스터 일정량 이상 잡아오는 퀘스트 이기 때문에 플레이어가 몬스터를 잡았을때, 몬스터가 죽었을때 해당 퀘스트의 조건 확인 메서드를 실행시켜 타겟몬스터면 카운트, 클리어조건을 충족하면 퀘스트 상태를 완료로 바꿔줍니다.
public class Quest_0 : Quest { int clearCondition = 2; int current = 0; public Quest_0() { SetQuest(0, "마을을 위협하는 슬라임 처치", 1000); target = "슬라임"; questInfo = "이봐! 마을 근처에 슬라임들이 너무 많아졌다고 생각하지 않나?\n마을주민들의 안전을 위해서라도 저것들 수를 좀 줄여야 한다고!\n모험가인 자네가 좀 처치해주게!"; requireLevel = 1; //Check_Requirement(); } public override void ShowQuestInfo() { base.ShowQuestInfo(); Console.Write($" - {target} "); if(questState == QuestState.CLEAR) { Console.Write(" - Clear -"); } else { Utill.WriteRedText(clearCondition.ToString()); Console.Write(" 마리 처치 "); } if(questState == QuestState.PROGRESS) { Console.Write($"{current} / {clearCondition}"); } } public override void Reset() { base.Reset(); current = 0; } public override void Clear() { base.Clear(); GameManager.Instance.player.Gold += rewardGold; GameManager.Instance.player.slainMonsters.RemoveAll(monster => monster.Name == target); } public override void CheckCondition(string name) { base.CheckCondition(); if (name.Contains(target)) { current++; } if(current >= clearCondition) { questState = QuestState.FINISH; } } }
728x90'Unity > Unity 스파르타' 카테고리의 다른 글
6주차 - Object Pool 예제 ( + Animator.StringToHash() ) (0) 2024.01.23 5주차 - Tilemap(2D) (0) 2024.01.18 리스트, 구조체 - '깊은복사' '얕은 복사'에 대한 고찰 (0) 2024.01.08 4주차, 플레이어의 데이터 저장하기, 불러오기 (2) 2024.01.04 3주차, 콘솔창으로 블랙젝 만들기 (1) 2024.01.03