전체 글 36

유닛 이동 불량 문제 해결: 부착 무기의 Collision 설정

문제 상황병영에서 생산된 유닛에게 집결지 또는 특정 위치로 이동 명령을 내렸을 때, 다음과 같은 문제가 발생했다.목적지를 향해 자연스럽게 이동하지 못함이동 도중 다른 유닛 주변에서 끼는 현상 발생방향을 반복해서 변경하며 비비는 듯한 움직임 발생목적지 근처까지 정상적으로 이동하지 못함동일한 이동 코드를 사용하는 다른 유닛은 정상적으로 움직임처음에는 AI 이동이나 NavMesh 문제처럼 보였지만, 실제 원인은 유닛에 부착된 무기의 충돌 설정이었다.원인 분석 과정1. 이동 명령 전달 여부 확인녹화 영상을 통해 유닛의 움직임을 확인했다.유닛이 완전히 정지한 것은 아니었으며 다음 동작은 정상적으로 실행되고 있었다.이동 명령이 전달됨이동 목적지 표시가 생성됨유닛의 월드 위치가 변경됨따라서 이동 명령이나 MoveTo..

유닛 이동 불량 원인 분석과 생산·튜토리얼 스폰 구조 정리

1. 유닛 이동 이상 현상 분석병영에서 생산된 유닛이 목표 지점으로 자연스럽게 이동하지 못하고, 주변에서 끼거나 비비는 듯한 현상이 발생했다.처음에는 다음 원인들을 의심했다.NavMesh 경로 문제유닛 Capsule 크기 문제Crowd Avoidance 문제이동 애니메이션 또는 Root Motion 문제집결지 위치 문제녹화 영상을 확인한 결과, 이동 명령 자체는 정상적으로 전달되고 있었으며 유닛의 위치도 실제로 변경되고 있었다. 따라서 경로 탐색보다는 개별 컴포넌트의 충돌 설정을 우선 확인했다.2. 이동 문제의 실제 원인 발견문제 유닛의 무기 Static Mesh Component에 다음 설정이 적용되어 있었다.Collision Presets = BlockAllDynamicGenerate Ov..

Unit 적 RowName설정 오류 및 공격 설정 변경

1. 적 유닛 체력이 1로 시작하는 문제문제 상황공격 Anim Notify의 피해량을 검증하려고 했지만 적 유닛이 한 번의 공격에 바로 사망했다. 처음에는 적 유닛의 체력이 실제로 1로 설정된 것으로 의심했다.원인 확인적 유닛 스포너에는 다음 Row Name이 설정되어 있었다.Infantry하지만 DT_Units를 확인한 결과 Infantry라는 Row Name은 존재하지 않았다. 유닛 스탯 초기화 구조는 다음과 같다.UnitSpawner의 Unit Row Name→ DT_Units에서 동일한 행 검색→ FUnitStatData 로드→ HealthComponent 초기화Infantry 행을 찾지 못하면서 다음 초기화가 실행되지 않았다.HealthComponent->InitializeHealth(InRow..

유닛 공격 판정 및 애니메이션 개선

오늘 작업한 내용오늘은 유닛 선택 정보 오류를 확인하고, 공격 피해가 애니메이션과 정확히 일치하도록 Anim Notify 기반 공격 시스템을 구성했다. 추가로 공격 중 이동 명령 처리와 사망 애니메이션 개선 작업을 시작했다.1. 유닛 선택 정보가 출력되지 않는 문제 확인BP_TestUnit의 GetSelectableInfo에 내용이 없는 재정의 함수가 생성되어 있었다.이 빈 재정의가 부모 C++ 함수인 AUnitBase::GetSelectableInfo_Implementation()의 실행을 막으면서 다음 정보가 기본값으로 반환되고 있었다.유닛 이름체력공격력이동속도유닛 타입초상화 애니메이션빈 재정의를 제거하여 부모 C++의 선택 정보 처리 함수를 사용하도록 정리했다.2. 공격 피해를 Anim Notify..

UE5 RTS 유닛 자동 전투 개선 및 주변 아군 타겟 공유 설계

오늘은 RTS 유닛 전투 시스템을 전체적으로 점검하고, 플레이어 유닛의 자동 공격이 자연스럽게 이어지도록 개선 방향을 정리했다.주요 목표는 다음과 같다.플레이어 및 적 AI의 자동 전투 구조 확인뒤쪽 유닛이 전투에 참여하지 않는 원인 분석일반 이동 중 적 발견 시 자동 교전하도록 개선한 유닛이 발견한 적을 주변 아군에게 공유하는 기능 설계유닛이 한 대상에게 몰릴 때 발생할 수 있는 문제 검토1. 현재 유닛 전투 구조 확인프로젝트의 팀 구분은 TeamIndex를 사용한다.진영TeamIndex플레이어0적 AI1양쪽 유닛 모두 공격 자체는 자동으로 수행한다.플레이어 유닛플레이어가 목적지를 지정할 수 있다.주변에서 적 유닛이나 적 건물을 발견하면 자동으로 공격한다.일반 이동과 공격 이동을 구분할 수 있다.적 A..

선택한 유닛의 3D 초상화가 표시되지 않는 문제

문제 상황지휘관이나 유닛을 선택하면 체력과 이동속도 같은 정보는 정상적으로 갱신됐지만, 왼쪽의 초상화 영역에는 선택한 캐릭터가 나타나지 않았다.이를 통해 다음 내용은 정상이라는 것을 확인할 수 있었다.유닛 선택 이벤트는 정상적으로 발생함선택 정보가 InGameUI까지 전달됨선택 정보 패널의 표시 및 텍스트 갱신은 정상 작동함문제 범위는 Scene Capture → Render Target → UI Material 출력 과정으로 좁혀짐원인 분석Scene Capture Component 2D가 실제 게임 월드를 기준으로 촬영하면서, 초상화용 캐릭터뿐만 아니라 하늘과 지형, 주변 오브젝트까지 함께 렌더링하고 있었다.배경을 투명하게 만드는 머티리얼만으로는 카메라에 들어오는 월드 오브젝트를 완전히 제외할 수 없었..

카테고리 없음 2026.08.31

RTS 선택 UI에 3D 초상화 연동

오늘의 목표기존 InGameUI의 선택 정보 패널에 Render Target 기반 3D 초상화를 연결하고, 선택 대상에 따라 2D 이미지와 3D 초상화를 구분해 출력하는 작업을 진행했다.지휘관·전투 유닛: 실시간 3D 초상화건물·광물: 기존 데이터테이블의 2D 이미지선택 해제: 선택 정보 패널 숨김1. 기존 2D 초상화 출력 구조 확인기존 WBP_SFSelectedInfoPanel에서는 데이터테이블에서 가져온 PortraitImage를 SelectedPortraitImage에 적용하고 있었다.FSFSelectableInfo.PortraitImage→ Set Brush From Texture→ SelectedPortraitImage이 구조는 건물이나 광물처럼 정적인 2D 이미지를 표시하는 데 적합하다. 하..

[Unreal Engine 5] Scene Capture와 Render Target을 활용한 3D 포트레이트 구현

RTS 게임에서 유닛을 선택했을 때 미니맵 왼쪽에 해당 유닛의 3D 초상화를 표시하기 위한 포트레이트 시스템을 작업했다.최종적으로 구현하려는 흐름은 다음과 같다.flowchart LR A["유닛 선택"] --> B["포트레이트 데이터 조회"] B --> C["Skeletal Mesh 및 Animation 적용"] C --> D["Scene Capture Component 2D 촬영"] D --> E["Render Target 출력"] E --> F["InGameUI 포트레이트 표시"]이번 작업은 크게 다음 두 단계로 나누어 진행했다.Blueprint를 이용한 Render Target 사전 테스트재사용 가능한 C++ 포트레이트 액터 작성1. Blueprint 기반 사전 테스트C+..

Scene Capture Component와 3D 애니메이션 적용

미니맵 하단 UI에 선택한 유닛의 모습을 표시하기 위해 처음에는 일반적인 2D 이미지를 사용하는 방법을 고려했다.하지만 유닛의 실제 외형과 애니메이션을 보여주려면 정적인 이미지보다 3D 모델을 직접 UI에 출력하는 방식이 더 적합하다고 판단했다.1. 발생한 문제UMG의 Image 위젯은 3D 액터나 Skeletal Mesh를 직접 출력할 수 없다.따라서 다음 기능을 구현하려면 중간 변환 과정이 필요했다.선택한 유닛의 3D 모델 출력유닛의 Idle 애니메이션 재생미니맵 하단 UI 영역에 모델 표시유닛이 변경되면 프리뷰 모델도 변경처음에는 월드에 배치된 실제 유닛을 직접 촬영하는 방법을 생각했지만, 다음과 같은 문제가 있었다.카메라 주변의 배경이 함께 촬영될 수 있음실제 유닛이 이동하면 프리뷰 구도가 변경됨..

[Unreal Engine 5] TeamIndex 기반 자원 관리와 3D 유닛 프리뷰 구현

오늘은 RTS 프로젝트의 팀별 자원 관리 구조를 정리하고, Render Target과 Scene Capture Component를 활용해 UI에 3D 유닛 모델을 표시하는 작업을 진행했다.1. TeamIndex 기반 상태 관리기존 자원 데이터가 하나의 공용 값으로 관리되면 플레이어와 AI의 자원이 섞일 수 있다.예를 들어 AI가 광물을 획득했는데 플레이어의 광물까지 증가하는 문제가 발생할 수 있다. 이를 방지하기 위해 GameState에서 TeamIndex를 기준으로 각 팀의 데이터를 분리하도록 구조를 설계했다.TeamIndex 0: 플레이어TeamIndex 1: 적 AI필요하면 이후 다른 팀도 추가 가능전체 구조는 다음과 같다.flowchart LR A["자원 획득"] --> B["TeamInde..