ABOUT ME

천리 길도 한 걸음부터

Today
Yesterday
Total
  • Land Of Memories - Quest (1)
    유니티 프로젝트/RPG-2D

    이번 작업은

     

    플레이어가 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' 카테고리의 다른 글

    댓글

김효겸 / Tel. 010-7735-0580 / E-mail. dollzzang2@hanmail.net