[TIL] 22일차 - 개인 과제 마무리

김유원·2024년 1월 23일
0

📝 24.01.23

오늘은 개인 과제를 마무리한 날이다.

개인 과제에서 제시한 필수 요구 사항 목록

  • 캐릭터 만들기
  • 이름 입력 시스템
  • 캐릭터 선택 시스템
  • 캐릭터 이동
  • 방 만들기
  • 카메라 따라가기
  • 캐릭터 애니메이션 추가

선택 요구 사항

  • 시간 표시
  • 인게임 이름 바꾸기
  • 인게임 캐릭터 선택
  • 참석 인원 UI
  • NPC 대화

여기서 참석 인원 UI와 NPC 대화창을 만들지 못한 것이 아쉬운데, 사실 NPC 대화창의 경우에는 기존의 만들었던 프로젝트들에서 여러번 만들어 보아서 만들 수 있겠지만 참석 인원 UI를 정말로 어떻게 해야할 지 모르겠다.

그래도 일단 필수 요구 사항을 전부 완성했다는 것에 만족한다.


하지만 이것을 만들면서 여러 어려움을 겪었다.
오늘 겪은 가장 큰 문제는 바로 저 깜빡거리는 E버튼, 즉 NPC 상호작용 버튼을 만들때 생겼다.

저 E 버튼은 NPC 근처 범위에 다가가면 상호작용 할 수 있다는 뜻으로 만든 것이다.

이를 위해서 NPC 근처에 빈 오브젝트로 Box Collider를 지정해 isTrigger을 켜주었다. 그리고 Trigger에 따라 함수가 실행될 수 있도록 스크립트를 짜주었다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TriggerDialogue : MonoBehaviour
{
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("enter");
    }
    private void OnTriggerStay(Collider other)
    {
        Debug.Log("stay");
    }

    private void OnTriggerExit(Collider other)
    {
        Debug.Log("exit");
    }
}

일단 작동 여부를 알고자 이렇게 코드를 짜고, Debug.Log()가 실행되기를 기다렸는데 아무리 범위 내에 들어가도 실행이 되지 않는 것이다. 오류가 나는 것도 아닌데!

그래서 일단 검색해보니, 한 오브젝트에 두가지 Collider를 넣을 수는 없다는 것이다. 그래서 Manager라는 빈 부모 오브젝트를 만들고, 캐릭터 스프라이트의 콜라이더와 빈 네모 콜라이더를 분리해서 입력해주었다.

그런데도 여전히 Debug.Log()는 묵묵부답이었다. 대략 1시간을 씨름했던 것 같다.

그러다 별안간 깨달았다... 내가 작업하고 있는 것은 2D 프로젝트이고 사용하고 있는 컴포넌트들은 모두 2D라는 것을...

곧바로 스크립트를 수정해주었다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TriggerDialogue : MonoBehaviour
{
    [SerializeField] GameObject E_key;
    private void OnTriggerEnter2D(Collider2D other)
    {
        //Debug.Log("enter");
        E_key.SetActive(true);
    }
    private void OnTriggerStay2D(Collider2D other)
    {
        //Debug.Log("stay");
        if (Input.GetKeyDown(KeyCode.E))
        {
            Debug.Log("E");
        }
    }

    private void OnTriggerExit2D(Collider2D other)
    {
        //Debug.Log("exit");
        E_key.SetActive(false);
    }
}

이렇게 실행한 결과 이제 범위 내에 들어가면 E버튼을 클릭하라는 상호작용 표시가 뜨고, 범위 내에 Stay하고 있을 때 E버튼을 뜨면 해당 Debug.Log("E")가 실행되는 것을 확인할 수 있었다.

물론 해당 상호작용 이후 대화창 연결까지는 시간 부족으로 완료할 수 없었지만, 어쨌든 무사히 해결할 수 있었다.

profile
개발 공부 블로그

0개의 댓글

관련 채용 정보