🧠 오늘의 핵심 정리

  • 팀 프로젝트 2일차 진행, 체감 대비 결과물이 적어서 아쉬웠던 하루
  • NPC 대화 시스템 완성 (텍스트 / 초상화 분기)
  • Raycast 기반 상호작용 안내 UI(E 표시) 구현
  • 애니메이션 클립 교체 방식으로 캐릭터 변경 기능 추가
  • UI 스케일 문제, 애니메이션 이름 오타 등 트러블 슈팅 경험

 

 

👥 팀 프로젝트 2일차

오늘 하루 종일 바쁘게 작업한 것 같은데, 막상 돌아보니 결과물이 많지는 않았다.

내일은 팀원 한 분이 바쁠 예정이라, 인벤토리 작업을 이어받아 마무리해야 할 것 같다.

체감과 결과물의 차이가 느껴져서 조금 아쉬웠던 하루.

 

 

🗣️  NPC 대화 시스템 완성

어제부터 만들던 NPC 상호작용을 오늘 마무리했다.

TalkManager를 통해 NPC 대사를 관리하고, isNpc 여부에 따라 UI를 분기했다.

  • NPC일 경우 → 대사 + 좌측 초상화 표시
  • 오브젝트일 경우 → 텍스트만 출력

대사는 "대사:초상화인덱스" 형태로 관리해서 파싱 후 연결했다.

핵심 로직 발췌

// isNpc 여부에 따라 UI 분기
if (isNpc)
{
    talkText.text = talkData.Split(':')[0];
    portraitImg.sprite = talkManager.GetPortrait(id, int.Parse(talkData.Split(":")[1]));
    portraitImg.color = new Color(1, 1, 1, 1);
}
else
{
    talkText.text = talkData;
    portraitImg.color = new Color(1, 1, 1, 0);
}

 

 

🅴  상호작용 안내 UI(E 표시)

플레이어 전방 Raycast에 오브젝트가 감지되면, 해당 오브젝트 위에 상호작용 안내 UI(E)가 나타나도록 구현했다.

감지 대상이 바뀌면 이전 UI는 끄고, 새로운 대상에만 켜지도록 처리했다.

// 대상 변경 시 Canvas 토글
if (currentTarget != scanObject)
{
    if (currentTarget != null)
        ToggleCanvas(currentTarget, false);

    currentTarget = scanObject;
    ToggleCanvas(currentTarget, true);
}

예전부터 꼭 만들어보고 싶었던 기능이라, 구현하고 나니 만족도가 높았다.

 

 

🧑  캐릭터 변경 기능

캐릭터를 바꾸는 기능을 처음으로 시도해봤다.

전체 애니메이터를 갈아끼우는 방식이 아니라, AnimatorOverrideController를 사용해 애니메이션 클립만 교체하는 방식을 사용했다.

UI가 아직 없어서, 번호키 1 / 2 / 3 입력으로 캐릭터를 전환하도록 구현했다.

// 번호키로 캐릭터 타입 변경
if (Input.GetKeyDown(KeyCode.Alpha1)) SwitchToTypeA();
if (Input.GetKeyDown(KeyCode.Alpha2)) SwitchToTypeB();
if (Input.GetKeyDown(KeyCode.Alpha3)) SwitchToTypeC();

 

 

🧨  트러블 슈팅

  • 캐릭터 이동 시 이전 캐릭터 애니메이션이 나오는 문제 → 클립 이름 오타 원인이었음
  • E UI를 World Space Canvas로 변경하니 크기가 너무 작아짐
  • TextMeshPro로도 해결되지 않아 CC0 키보드 이미지 UI로 교체

중간중간 삽질은 있었지만, 결국 원하는 형태로 마무리할 수 있어서 다행이었다.

 

 

📌 오늘의 회고

결과물만 보면 아쉬운 하루였지만, NPC 대화 / 상호작용 UI / 캐릭터 변경처럼 게임다운 요소들을 하나씩 붙여나간 날이었다.

내일은 인벤토리 작업을 이어받게 될 것 같아서, 오늘보다 더 집중해서 마무리해보고 싶다.

 

 

🔜 내일 할 일

  • 인벤토리 기능 이어받아 구현 및 정리
  • 오늘 만든 기능들 버그 재확인
  • 캐릭터 변경 UI 방식 고민