Skip to content

AndrewRoh/NPC-X-Pub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

NPC-X

UE5.7 C++ 게임 클라이언트(Client02)와 네이티브 C++ Windows 컨트롤 패널(ControlPannel)을 TCP JSON 프로토콜로 연결하여 NPC 캐릭터를 원격 제어하는 로컬 테스트 시스템.


NavMesh Export 및 자동 이동 테스트 흐름

  1. UE5.7에서 NavMeshBoundsVolume을 배치하고 Nav Mesh를 빌드합니다.

NavMeshBoundsVolume 설정

  1. UE5.7 에디터 메뉴의 **Tools > Nav Export > Export NavMesh to BIN...**을 실행하여 NavMesh.bin 파일을 Export합니다.

NavMesh Export 메뉴

  1. ControlPannel에서 ReadNavBin으로 NavMesh.bin 파일을 읽어 들입니다.
  2. Connect를 눌러 UE5.7 클라이언트에 연결한 뒤 SpawnAll을 실행하여 10개의 Character를 화면에서 확인합니다.

ControlPannel AutoMoveAll 테스트

  1. AutoMoveAll 명령으로 전체 Character 자동 이동 테스트를 수행합니다.

AutoMoveAll 자동 이동 테스트


전체 구조

NPC-X/
├── Client02/          ← UE5.7 C++ 게임 클라이언트
│   ├── Source/Client02/
│   │   ├── CommandServer        ← TCP 수신 서브시스템 (포트 7777)
│   │   ├── Client02GameMode     ← 탑다운 게임 모드, 고정 카메라
│   │   ├── FixedCameraSubsystem ← 고정 카메라 관리
│   │   ├── Variant_Strategy/    ← 전략 게임 변형 (RTS 스타일)
│   │   └── Variant_TwinStick/   ← 트윈스틱 슈터 변형 (NPC AI 포함)
│   └── Plugins/WorldUtilsEditor/
│       └── Source/WorldUtilsEditor/
│           ├── NavExportCommand        ← 에디터 메뉴 커맨드 등록
│           ├── NavigationExporter      ← NavMesh → OBJ / BIN 익스포터
│           └── WorldUtilsEditorModule  ← 플러그인 모듈 진입점
│
└── ControlPannel/     ← C++ WinAPI 컨트롤 패널 (명령 송신)
    ├── ControlPannel.cpp  ← 메인 윈도우, UI 레이아웃
    ├── TcpClient.h/.cpp   ← TCP 연결/재연결, 수신 루프, 하트비트
    ├── JsonBuilder.h      ← JSON 명령 직렬화 (헤더 전용)
    └── detour/            ← Detour 네비게이션 라이브러리 (로컬)

아키텍처

[ControlPannel]  ──── TCP 127.0.0.1:7777 ────>  [Client02 (UE5.7)]
  TcpClient                                        UCommandServer
  JsonBuilder                                      FCommandClientWorker (per-client thread)
  detour/ (경로 계산)                               AIController::MoveToLocation()
  NavMesh.bin (로드)                                NavMesh + Detour 경로탐색
  • 단방향 제어: ControlPannel이 명령을 송신, UE가 실행
  • 응답 이벤트: actor_position, random_position 등 UE → ControlPannel 역방향 전송 가능
  • 로컬 전용: 네트워크 멀티플레이 없음, 127.0.0.1 고정

통신 프로토콜 (JSON Lines + Heartbeat v1)

각 명령은 \n으로 구분되는 한 줄 JSON.

명령 (ControlPannel → UE)

{"v":1,"type":"command","cmd":"spawn","options":{"actorId":"Unit001","characterType":"Soldier","location":{"x":0,"y":0,"z":100}}}
{"v":1,"type":"command","cmd":"destroy","options":{"actorId":"Unit001"}}
{"v":1,"type":"command","cmd":"move_to_position","options":{"actorId":"Unit001","location":{"x":500,"y":200,"z":100}}}
{"v":1,"type":"command","cmd":"get_position","options":{"actorId":"Unit001"}}
{"v":1,"type":"command","cmd":"find_random_position","options":{"actorId":"Unit001"}}
{"v":1,"type":"heartbeat"}

이벤트 (UE → ControlPannel)

{"v":1,"type":"event","event":"actor_position","actorId":"Unit001","location":{"x":0,"y":0,"z":100}}
{"v":1,"type":"event","event":"random_position","actorId":"Unit001","location":{"x":300,"y":150,"z":100}}

빌드

Client02 (UE5.7)

Visual Studio에서 Client02/Client02.sln 열고 빌드하거나 UE Editor에서 직접 빌드.

UnrealBuildTool.exe Client02Editor Win64 Development "E:/Work/NPC-X/Client02/Client02.uproject"

ControlPannel (C++ WinAPI)

Visual Studio에서 ControlPannel/ControlPannel.sln 열고 빌드.

항목
플랫폼 x64
구성 Debug / Release
의존성 ws2_32.lib, comdlg32.lib, detour (로컬 서브프로젝트)

에디터 플러그인 — WorldUtilsEditor

UE Editor의 Tools > Nav Export 메뉴를 통해 NavMesh를 파일로 내보냅니다.
ControlPannel의 Detour 경로탐색에서 이 파일을 로드합니다.

기능 출력 형식 용도
Export NavMesh to OBJ .obj NavMesh 형상 시각화
Export NavMesh to BIN .bin ControlPannel의 Detour 경로탐색

BIN 포맷: MSET 매직 + Hybrid 헤더(LWC double) + Detour 타일 raw bytes.


주요 구현 패턴

UE 스레드 안전

TCP 수신은 백그라운드 스레드(FCommandClientWorker)에서 처리하고,
Actor 조작은 반드시 GameThread로 전환 후 실행.

AsyncTask(ENamedThreads::GameThread, [Handler, Line]()
{
    (*Handler)(Line);
});

UObject 포인터를 백그라운드 스레드 람다에서 직접 캡처하면 크래시. SharedLineHandler 패턴으로 우회.

TCP 자동 재연결

UE가 꺼진 상태에서도 ControlPannel이 크래시 없이 재연결을 시도.
TcpClientRecvLoop가 소켓 오류 감지 시 OnStateChanged(false) 콜백으로 UI에 통보.


게임 변형 (Variant)

변형 위치 특징
Strategy Variant_Strategy/ RTS 스타일, 탑다운 카메라, 유닛 직접 선택
TwinStick Variant_TwinStick/ 트윈스틱 슈터, AI NPC (StateTree), 스포너, 발사체

About

UE5.7 NavMesh Export / Import 자동 이동 테스트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors