-
이번 작업은
플레이어가 NPC와 상호작용 하여 퀘스트를 완료하는 작업 구현을 진행하며 작성할 것입니다.
또한 이 퀘스트를 완료하게 되면 다음 Stage(맵)으로 이동할 수 있는 구현을 할 예정입니다.
가장 먼저 배치된 Npc에 Box콜라이더를 입혀 주었습니다.
(다 아시겠지만 BoxCollider 2D 가 붙어야 합니다)
저처럼 일반 3D용 BoxCollider를 추가해서 레이가 감지가 안 되는 이유를 찾는 불상사가 없길 바랍니다.
다음은 기존 Npc (Helper)를 클릭했을 때 실행되는 스크립트에서 추가를 할 것입니다.
위와 같이 else if로 npc의 name을 검색하는 조건문을 추가해 주었으며,
로그를 찍어 확인을 해보았습니다.
NPC_Helper를 클릭했을 때와 달리 NPC_Cry를 클릭하면
stage01 CryNpc가 활성화됩니다.
활성화될 UI입니다.
총 5개의 대화를 주고받으며 퀘스트가 시작되는 구현을 해보았습니다.
다음은 기존 PopupAnimation 스크립트에
추가 선언된 변수입니다.
각 UI를 실행하도록 맡았으며 특이 사항은
nextButton, npcImage, npcSprite
는 첫 번째 활성화될 UI의 버튼, 이미지, 스프라이트입니다.
퀘스트가 진행 중이면 키 오브젝트가 활성화되면서,
NPC를 다시 클릭했을 때 다른 UI를 보여주기 위함입니다.
keyGameObject
퀘스트 진행 하면 자동으로 활성화되는 오브젝트입니다.
플레이어가 이 오브젝트와 상호작용을 한 뒤
다시 NPC에게 다가가면 감사의 인사를 건네받은 뒤
다음 스테이지로 가는 길이 열리게 됩니다.
checknumber
현재 팝업 되는 UI가 어떤 UI인지 판단할 변수입니다.
현재 NPC가 2 종류 (Helper, Cry)가 있습니다.
checkQuesting
퀘스트 중인지 판단할 불 변수입니다.
이 퀘스트가 진행 중이면 NPC를 클릭했을 때 다른 UI가 활성화됩니다.
또한 Header를 사용하였는데, 이는 특별한 기능은 아니고 개인적으로 인스펙터 창에서 보기 편리하기 위함입니다.
다음은 오브젝트가 활성화될 때 실행되는 OnEnabled() 함수입니다.
각 NPC의 이름을 검사하여 현재 어떤 UI가 활성화되어있는지 판단을 합니다.
else if 조건문에 한번 더 조건 검사를 하였는데,
이는 퀘스트 진행 전/후를 나뉘어서 구현을 하기 위함입니다.
이후 ShowPopup() 함수를 실행시킵니다.
다음은 ShowPopup() 함수입니다.
조건문을 크게 보자면
Helper NPC 클릭했을 때
Cry NPC 클릭했을 때
(퀘스트 전)
Cry Npc 클릭했을 때
(퀘스트 후)
입니다. 이후 애니메이션 실행 방식은 DOTween을 사용한 기존과 동일하게 하였습니다.
다음은 Close 버튼을 클릭하면 실행될 HidePopup() 함수입니다.
ShowPopup() 함수와 마찬가지로 cjeckNumber로 현재 어떤 UI가 활성화되어있는지 판단을 하여
각 맞는 UI를 비활성화시켜 주는 구현입니다.
다음 동작 구현은 반복 작업에 동일하기에 함수명으로 대체하겠습니다.
각 Public으로 선언하여 버튼의 OnClick 이벤트로 연결을 해 주었습니다.
그리고 퀘스트 대화 마지막에 Enter 버튼을 클릭하면 실행될
OnClickFiveEnterButton()과
퀘스트 중일 때 닫기 버튼인
OnClickQuestingCloseButton()
를 살펴보겠습니다.
먼저 OnClickFiveEnterButton() 함수가 호출되면 실행될
FiveEnterButton() 함수입니다.
대화 마지막에 도달하여, 퀘스트 진행을 하려고 Enter Button을 누르게 되면
키 오브젝트를 활성화, 퀘스트 진행 여부를 판단할 불 변수를 true, 그리고 UI를 숨기게 됩니다.
마지막으로 OnClickQuestingCloseButton() 호출되면 실행될
QuestingCloseButton() 함수입니다.
이 함수는 퀘스트가 진행 중일 때 팝업된 UI의 닫기 버튼입니다.
플레이어가 물어볼 땐 (1500, 0) 의 좌표에서 UI 애니메이션이 실행되며
NPC가 물어 볼 땐 (0, -600)의 좌표에서 UI 애니메이션이 실행됩니다.
흐름을 정리하자면 다음과 같습니다.
1. NPC를 클릭하면 NPC의 이름을 토대로 UI를 팝업 합니다.
2. 팝업 된 UI를 컨트롤하는 스크립트에서 한번 더 조건으로 검사를 하게 됩니다.
(이는 스크립트를 나누지 않고 추가 NPC가 있을 시 재사용하기 위함입니다.)
3. UI 내에는 크게 3가지가 있습니다.
(Text, nextButton, CloseButton) 각 기능에 맞게 OnClickEvent로 연결을 시켜 주었습니다.
4. 퀘스트를 수락하면, 퀘스트가 진행 중인지 판단을 합니다.
(퀘스트 진행 전/후 NPC와의 상호작용 팝업 UI가 달라집니다.)
5. 'key' 오브젝트가 활성화됩니다.
Key 오브젝트와 플레이어가 상호작용을 한 뒤
NPC에게 다시 돌아가 퀘스트를 완료하는 작업을 하기 전!
생각 정리를 한번 하고 작업 구현에 들어가야 할 것 같아서,
두 번에 나누어서 일지를 작성하기로 했습니다.
감사합니다.
'유니티 프로젝트 > RPG-2D' 카테고리의 다른 글
Land Of Memories - UI Design (0) 2024.11.21 Land Of Memories - Quest (2) - KeyObject (0) 2024.11.20 Land Of Memories - Pixel Art (0) 2024.11.19 Land Of Memories - Loading Image (0) 2024.11.18 Land Of Memories - Data Save - JSON (0) 2024.11.18