ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5주차 - Quest 만들기
    Unity/Unity 스파르타 2024. 1. 15. 20:31
    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
Designed by Tistory.