■ 구현 기능
– NPC, 플레이어 대화 상호작용
■ 구현 과정
1. NPC 오브젝트 생성
· NPC 캐릭터 이미지를 Hierarchy 창에 드래그 하여 배치
· BoxCollider2D 컴포넌트를 추가하여 클릭을 감지할 수 있도록 설정
2. 대화 UI 제작 (DialoguePanel)
· Canvas 안에 [DialoguePanel] 생성
· 그 안에 TextMeshPro 텍스트(DialogueText) 추가

3. DialogueManager 스크립트 작성
· ShowDialogue()와 HideDialogue() 함수를 통해 대화창을 켜고 끄는 기능 구현
· IsDialogueVisible() 함수를 통해 현재 대화창의 상태를 확인할 수 있도록 구현
(NPC를 다시 클릭했을 때 대화창을 닫기 위한 조건으로 사용)
[DialogueManager.cs]
using UnityEngine;
using TMPro;
public class DialogueManager : MonoBehaviour
{
public GameObject dialoguePanel; // 대화 UI 패널
public TextMeshProUGUI dialogueText; // 대사 표시 텍스트
public static DialogueManager instance; // 싱글톤 (전역 접근용)
private void Awake()
{
// 이 스크립트를 전역에서 접근할 수 있도록 설정
if (instance == null)
{
instance = this;
}
else
{
Dsetroy(gameObject);
}
}
public void ShowDialogue(string sentence)
{
dialoguePanel.SetActive(true); // 대화창 보이기
dialogueText.text = sentence; // 텍스트 넣기
}
public void HideDialogue()
{
reuturn dialoguePanel.activeSelf; // 클릭하면 대화창 숨기기
}
}
4. NPCClick 스크립트 작성
· NPC를 클릭했을 때 대화창이 열리도록 구현
· 대화창이 열려있을 때 다시 클릭 시 대화창이 닫히도록 구현
· 대화 텍스트는 문자열 변수로 선언하여 설정 가능
[NPCClick.cs]
using UnityEngine;
public class NPCClick : MonoBehaviour
{
public string dialogueLine = “안녕! 처음 보는 얼굴이네? 여긴 정말 평화로운 곳이야. 이 마을에 온 걸 환영해. 씨앗처럼 작게 시작해서, 크게 자라나길!”;
private void OnMouseDown()
{
// DialogueManager 인스턴스가 있을 때
if (DialogueManager.instance != null)
{
// 대화창이 켜져 있으면 끄기
if (DialogueManager.instance.IsDialogueVisible())
{
DialogueManager.instance.HideDialogue();
}
else
{
DialogueManager.instance.ShowDialogue(dialogueLine);
}
}
}
}
■ 작동방식
· 실행 시, NPC를 클릭하면 DialogueManager의 ShowDialogue()가 호출되어 대화창이 나타남
· 같은 NPC를 다시 클릭하면 IsDialogueVisible()을 통해 대화창 상태를 확인한 뒤 HideDialogue()를 호출하여 대화창을 닫음
■ 에러 발견 및 해결
텍스트가 깨져서 표시됨 (□□!)
· 원인 : 기본 폰트가 한글을 지원하지 않아 글자가 깨짐
· 해결 방법 : 한글을 지원하는 폰트를 새로 임포트한 뒤, TextMeshPro의 Font Asset에 해당 폰트 적용
UI 오브젝트가 Inspector에 연결되지 않음
· 에러 메시지 : UnassignedReferenceException: The variable dialoguePanel of DialogueManager has not been assigned.
· 원인 : DialogueManager 스크립트에서 dialoguePanel 변수에 Unity Editor에서 오브젝트를 드래그하여 연결하지 않았기 때문.
· 해결 방법 : Hierarchy 창에 있는 DialoguePanel 오브젝트를 DialogueManager의 dialoguePanel 슬롯에 직접 드래그하여 연결함
■ 맵, NPC 이동
맵 -> 맵 전환 효과 넣음 + 카메라가 플레이어를 자동으로 따라감
이동은 문제가 없음 하지만 잠깐 어두워지는 효과를 넣기위해 판넬을 사용하였지만
효과가 제대로 나오지 않는 문제가 발생함 // 금방 고침
한 방향으로만 갈 수 있게 설정해둠
갔던 곳에서 다시 돌아오기 X
카메라가 플레이어를 자동으로 따라가면서 카메라에 맵이 아닌 곳이 같이 노출이 됨
크기를 조절하고 따라다니게 해보았지만 같은 곳에 머물기 혹은
플레이어가 화면에서 사라지는 현상이 발생해버림
일단은 지우기로 결정하여 영상과 같아짐
다음주까지
- 모든 맵 사물 , 플레이어 충돌 방지 (4개 남음)
- 모든 맵 간 왔다 갔다 가능하게 만들기
- 플레이어와 NPC간 상호작용 UI 더 완성도 높이기
- 화면에 맵이 아닌 다른 배경 노출하지 않도록 설정하기