본문 바로가기
개발자가 되어보자..공부공부

C# 유니티 공부 11 - 퀘스트 코딩, 재귀함수, 오버로딩, Dictionary 활용.

by 묭묭이와소담이 2022. 12. 11.
반응형

1. 퀘스트 데이타, 스크립트 생성. (구조체)
(상속 기능 필요없음.. 직접 불러서 쓸 것)
- 퀘스트 네임, npc ID(배열) 2가지 변수 생성.

- 구조체 생성을 위한 매개변수 생성자를 작성해주어야 함.

pulbic 퀘스트데이타(퀘스트 네임, npc id)

       퀘스트네임 = 네임;
       npc id = npc;
}

QuestData 스크립트.

 




2. 퀘스트 매니저, 스크립트 생성.
- 퀘스트ID 변수 생성.

- Dictionary<int, 퀘스트데이타> 퀘스트리스트(변수명) 생성.
- 데이타 저장 함수 생성.
- 데이타 저장 함수 내부에 Dictionary.Add 로 데이터 저장.
퀘스트리스트.Add(10, new 퀘스트데이타("퀘스트네임", new int []{npc id})
이것을 사용하려면 구조체 생성자를 미리 작성해주어야 함.

- int 퀘스트액션인덱스 변수 및 함수 생성. 
(퀘스트 순서를 위해서 필요) 
퀘스트ID+퀘스트액션인덱스를 반환(return)해주는 함수.

- 퀘스트의 순서를 체크해주는 함수 생성.
조건문을 통하여.. npc id와 퀘스트리스트에 저장된, 그리고 퀘스트ID에 저장된 
퀘스트액션인덱스번째 변수가 같다면.....
퀘스트액션인덱스를 ++ 함.

또한 퀘스트액션인덱스와 퀘스트ID에 저장된 NPCIC의 배열 갯수가 같다면
다음 퀘스트를 진행하는 함수를 호출.

 

Quest Manger 스크립트 일부.

* NextQuest라는 함수를 생성하여 QuestID와 questActionIndex라는 변수를 조정한다.

* ControlObject라는 함수를 생성하여, 퀘스트 진행상황에 따라 Object를 활성화/비활성화 시킨다.

 

 




3. 게임매니저
- Public 퀘스트매니저 생성.

퀘스트 ID를 증가시킴( 다음 퀘스트 ID까지)
그리고 퀘스트액션인덱스는 0으로 초기화.

 

Game Manager 일부분.

 

 


4. 토크매니저
- npc id + 퀘스트 인덱스로 해서 대화를 호출.

 

TalkManger 스크립트의 Quest Talk 부분.






* 동전찾아주기 퀘스트.

1. 퀘스트 오브젝트를 관리할 함수 생성.

- 동전 찾아주기 퀘스트라면.. 퀘스트를 받기 전에 동전은 보이지 않아야 함.
퀘스트를 받은 후에 동전이 생겨야함.
(Switch 조건문을 사용하여, 퀘스트ID를 비교.
내가 원하는 퀘스트 ID가 맞다면 오브젝트를 활성화 또는 비활성화 시킴.)




* 예외 처리. (퀘스트 대화를 모두 진행할 필요는 없음...)
- Containskey() : Dictionary에 Key가 존재하는지 검사해주는 함수.

1. 해당 퀘스트 진행 순서 중, 다른 대사가 없을 때
(퀘스트 맨 첫 대사를 가져온다)

if(토크인덱스 == 토크데이타[ID-ID%100].Lengh)
return null;

else
return 토크데이타[id-id%10][토크인덱스];


2. 퀘스트 맨 처음 대사마저 없을 떄. 
(기본 대사를 가지고 온다.)
퀘스트번호까지 제거 후 재탐색.

if(토크인덱스 == 토크데이타[ID-ID%100].Lengh)
return null;

else
return 토크데이타[id-id%100][토크인덱스];

★ 반환값이 있는 재귀함수는 꼭 return을 해주어야 함.

 

Talk Manger 스크립트에서 Dictionary에 저장된 데이터를 가져오는 함수. 왼쪽의 복잡한 코딩을...오른쪽 처럼 간단하게 변경. (★ Return 값이 있는 재귀함수는 Return을 꼭 넣어주어야 함.)

 

 



* 내가 지금 어떤 퀘스트를 진행하고 있는가?? 
퀘스트를 진행할 때, 다른  NPC에게 말을 걸었을 때..

★ 함수명이 같아도 여러 개의 함수를 정의 할 수 있다.
왜?? 사용하는 매개변수가 다르기 때문이다.

ex. 

public string CheckQuest(ind ID)
{}

public string Check Quest()

함수를 사용하면서 적는 매개변수에 따라 자동으로 관련 함수가 호출됨.

 

함수의 OverLoading (오버로딩)





★ 요점

NPC ID, 토크 인덱스...
퀘스트 ID, 퀘스트 인덱스...
이런 숫자들을 잘 조합하는 것.

NPC ID는 1000,2000
토크 인덱스는 1, 2
토크데이타는 1001,1002

퀘스트 ID는 10, 20
NPC 퀘스트 대화는 1010, 1020 

 

이런 숫자를 활용하는 원리.

 


 

 

 

 

 

 

 

 

 

 

 

반응형

댓글