📝 24.01.23
오늘은 개인 과제를 마무리한 날이다.
개인 과제에서 제시한 필수 요구 사항 목록
선택 요구 사항
여기서 참석 인원 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")
가 실행되는 것을 확인할 수 있었다.
물론 해당 상호작용 이후 대화창 연결까지는 시간 부족으로 완료할 수 없었지만, 어쨌든 무사히 해결할 수 있었다.