전체 글 25

UE5 멀티플레이 환경에서 인벤토리–무기 장착 파이프라인 연결하기

인벤토리의 무기 아이템을 장비 슬롯으로 이동하면 UI 아이콘뿐 아니라 캐릭터의 실제 무기 Actor까지 교체되도록 구현했다.단순히 위젯에서 무기를 생성하는 방식은 피했다. UI는 무기의 식별자인 RowName만 전달하고, 실제 검증과 Actor 생성은 서버 권한을 가진 캐릭터가 담당하도록 책임을 분리했다.DT_Item→ WeaponRowName 전달→ PlayerCharacter 서버 RPC→ 서버 데이터 검증→ 기존 무기 제거→ 새 무기 생성 및 부착→ 장착 상태 복제 1. 아이템 데이터와 무기 데이터의 결합도 낮추기프로젝트에서는 아이템 데이터와 무기 데이터를 별도의 데이터테이블로 관리한다.DT_Item: 인벤토리 표시, 아이콘, 가격, 아이템 분류DT_Weapon: 무기 성능, 무기 타입, 무기 A..

외부 캐릭터를 기존 TPS 시스템에 붙이며 겪은 리타겟팅 트러블슈팅

이번 작업에서는 기존 플레이어 캐릭터에 사용하던 마네퀸 기반 애니메이션 시스템을 유지하면서, 새 외형 캐릭터인 Wraith를 적용하는 작업을 진행했다.단순히 스켈레탈 메시만 교체하면 끝날 것처럼 보였지만, 실제로는 애니메이션 리타겟팅, ABP 구조, 루트 이동, 머티리얼, 무기 메시 처리까지 여러 부분이 맞물려 있었다. 특히 이번 작업의 핵심은 “새 캐릭터가 보이게 만들기”가 아니라, 기존 이동/조준/무기 교체 시스템을 최대한 유지하면서 외형과 애니메이션만 안정적으로 교체하는 것이었다.이미지 삽입 위치추천 이미지: 기존 마네퀸 캐릭터와 Wraith 캐릭터를 비교한 화면. 가능하면 Content Browser에서 두 스켈레탈 메시를 나란히 보여주거나, 기존 캐릭터 BP와 새 Wraith 메시 프리뷰를 함께..

Unreal Engine 무기 장착 시스템 확장성 개선하기

프로젝트에서 무기 시스템을 구현하면서 처음에는 권총, 라이플, 샷건처럼 정해진 무기만 처리하면 충분했다. 하지만 무기가 늘어날수록 문제가 생겼다. 새 무기를 추가할 때마다 캐릭터 코드의 switch 문을 수정하고, 무기별 데이터 변수를 새로 만들고, 애니메이션 처리도 계속 추가해야 했다.이번 글에서는 기존 무기 장착 구조의 문제점을 정리하고, DataTable과 TMap을 이용해 무기 추가가 더 쉬운 구조로 개선한 과정을 정리한다.기존 구조의 문제기존 코드는 무기 타입에 따라 각각 다른 FDataTableRowHandle을 선택하는 방식이었다.FDataTableRowHandle SelectedWeaponData;switch (NewWeaponType){case EWeaponTypes::Pistol: ..

Unreal Engine 멀티플레이 캐릭터 전투 시스템 구현기

이번 작업에서는 플레이어가 데미지를 받고, 체력이 감소하며, 체력이 0이 되었을 때 사망 처리까지 이어지는 기본 전투 흐름을 구현했다. 단순히 체력 변수 하나를 추가하는 작업처럼 보이지만, 멀티플레이 환경에서는 누가 체력을 깎을 권한을 가지는가, 클라이언트에는 어떻게 동기화되는가, 사망 연출과 UI는 어디에서 처리하는가를 함께 고려해야 했다.구현 목표플레이어 체력을 PlayerState에서 관리하기AI 공격으로 플레이어가 데미지를 받게 하기체력 값을 네트워크로 동기화하기체력이 0이 되면 캐릭터가 사망 처리되게 하기죽음 몽타주와 종료 UI 흐름을 연결하기PlayerState에 체력 추가플레이어의 체력은 PlayerCharacter가 아니라 PlayerState에 추가했다. 이유는 체력이 단순한 애니메이션 ..

Unreal Engine TPS 캐릭터 구현 정리

무기별 로코모션, 장착 메시, 조준 상태, 카메라 전환까지이번 작업에서는 TPS 캐릭터의 기본 이동 구조 위에 무기별 로코모션과 조준 시스템을 추가했다. 처음에는 피스톨 로코모션만 있는 상태였고, 이후 라이플과 샷건을 같은 구조로 확장했다. 최종적으로는 무기 타입에 따라 캐릭터 애니메이션, 실제 장착 무기 메시, 조준 포즈, 카메라 시점이 함께 바뀌도록 구성했다.1. 무기별 로코모션 분리기존에는 피스톨 기준의 로코모션만 사용하고 있었다. 이후 라이플과 샷건을 추가하기 위해 AnimGraph에 무기별 State Machine을 구성했다.구조는 다음과 같다.Pistol_LocomotionRifle_LocomotionShotgun_Locomotion→ Blend Poses by EWeaponType→ Orie..

Unreal Engine 캐릭터 시스템 구현기

입력, 이동, 애니메이션, UI, 플레이어 상태 관리까지이번 프로젝트의 Character 폴더는 플레이어가 실제로 조작되는 흐름을 중심으로 구성되어 있다. 단순히 캐릭터를 움직이는 코드만 있는 것이 아니라, 입력 처리, 카메라 기반 이동, 달리기, 애니메이션 상태 갱신, UI 입력 모드 전환, 플레이어 데이터 복제와 저장까지 여러 시스템이 연결되어 있다.핵심 클래스는 다음과 같다.APlayerCharacterUPlayerCharacterAnimInstanceAMyPlayerControllerAPlayerCharacterStateATestGameMode각 클래스는 하나의 거대한 캐릭터 클래스에 모든 기능을 몰아넣지 않고, 역할에 따라 책임을 나누는 방식으로 구현되어 있다.1. PlayerCharacter:..

Unreal 8기 TA 개인과제 프로시듀얼 쉐이더 응용하기

프로시듀얼 쉐이더를 응용해 구체하나를 만들어보겠습니다.기계로봇의 심장느낌을 만들어보도록 하겠습니다. 처음엔 기본적으로 배운 TexCoord를 불러와 SphereMask로 빠르게 원을 분리시켜줍니다. 직접 벡터거리를 구해서 하는 방법도 있지만 빠르게 원을 구하는 이 방법으로 하겠습니다이런 모양이 만들어집니다. 이제 심장박동같은 모션을 넣어주기 위해 SphereMask의 Radius에 노드들을 추가해주겠습니다. Time → Multiply(0.3) → Sine: 시간에 따라 0.3의 속도로 값을 -1에서 1 사이로 계속 진동시킵니다. Sine 노드를 사용했기 때문에 단순히 값이 커지는 게 아니라, 부드럽게 커졌다가 작아지는 반복 운동을 만들어냅니다.Noise → Multiply(0.2): Noise는 고정..

Unreal 8기 TA 개인과제 구체만들기

언리얼의 머티리얼을 이용하여 워터볼을 만들어보겠습니다. 먼저 Place Actors의 Shapes에서 Sphere를 레벨에 꺼내와줍니다. 그리고 머티리얼 폴더안에 M_WaterBall이라는 머티리얼파일을 생성해줍니다. 물처럼 만들기 위해서는 투명도가 있어야하기때문에 detail패널에서 Shading Model을 Translucent로 설정해줍니다.그럼 기본노드에 Opacity가 생깁니다. 먼저 색상을 선택해줍니다. 연한 하늘색으로 생성했습니다.물이기 때문에 Roughness는 0으로 설정하고 Specular(반사광의 세기를 조절) 1.0으로 설정해줍니다. 다음으로 투명도를 설정해줍니다. Fresnel이라는 노드를 사용합니다. 이 노드는 중심부와 바깥면의 투명도를 자연스럽게 다르게 해줍니다. 더 ..

Unreal 8기 TA 개인과제 AI 캐릭터 생성하기

ai를 이용한 3d캐릭터 생성 및 언리얼 배치 먼저 3d ai툴들을 비교해보았습니다.저의 캐릭터컨셉은 군인입니다. 1.메쉬ai 메쉬 ai 버전6에 비해 퀄리티가 많이 낮은편입니다. 폴리곤 수 가 9000인 만큼 얼굴이 일그러져 나옵니다. 2. Tripo ai 메쉬ai에 비해 확실히 사실적으로 표현해줍니다. 그러나 익스포트가 유료이기 때문에 사용하지 못했습니다. 3. Rodin ai 개인적으로 전체적인 느낌은 깔끔하게 뽑히는것 같습니다. 하지만 얼굴표현이 안된다는 가장 큰 단점이 있습니다.( 모자를 쓰고있어서 그런것으로 추정.) 나중에 편한 오토리깅을 하기위해 T포즈 군인으로 바꾸어주겠습니다. obj파일로 추출 후 블렌더로 이동합니다. 로빈을 사용해 추출하니 확실히 얼굴이 별로입니다. 로빈은 폴..

Unreal 8기 게임개발 TA 개인과제

타르코프류 게임이라는 말이 있을정도로 게임장르의 한 획을 긋고있는 타르코프류 게임의 원조 타르코프를 개발자의 시선으로 분석해보도록 하겠습니다. 간단한 게임 설명 1인칭 fps게임으로 유저들을 한 지역에 모아두고 파밍과 교전을 할수있는 게임입니다. 하지만 다른fps 게임과 다르게 파밍한무기를 가지고 나올수있고, 죽으면 장착하고 들어갔던 개인무기도 모두 없어집니다. 그리고 1등만 살아남는 형식이 아닌 탈출구로 탈출하면 생존할수있는 게임입니다. 왜 타르코프게임이 성공할수있었을까? 1.리스크와 리워드의 극대화 가장 핵심적인 설계는 영구적인 손실입니다. 일반적인 FPS가 한 판의 승패로 끝난다면, 탈코프는 플레이어가 소유한 '재화'를 담보로 게임을 진행하게 합니다.심리적 몰입감: 죽으면 모든 것을 잃는다는 규칙은..