Unity/Unity 스파르타
5주차 - Quest 만들기
휘게31
2024. 1. 15. 20:31
728x90
순서
- 퀘스트 클래스 만들기
- 퀘스트 만들기
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