본문 바로가기

Unity/Unity 스파르타

5주차 - Quest 만들기

728x90

순서

  1. 퀘스트 클래스 만들기
  2. 퀘스트 만들기

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