전체 글 1289

InstancedStruct에 대하여

- 개요 ActorExtension에서 조건과 조건부 행동을 저장하는 용도로 사용한 InstancedStruct에 대해서 알아본다 1) 객체 슬라이싱 - 일반 클래스나 구조체의 상속에서 발생가능한 문제USTRUCT(BlueprintType)struct FBaseData{ GENERATED_BODY() UPROPERTY(EditAnywhere) int32 Value = 10;};USTRUCT(BlueprintType)struct FDerivedData : public FBaseData{ GENERATED_BODY() UPROPERTY(EditAnywhere) float ExtraValue = 20.0f;}; 위와 같이 2개의 구조체를 생성한다이때 DerivedData 구조체..

Extension에 대하여

- 개요언리얼 엔진에서 Actor의 기능을 확장하는 용도로 사용할 수 있는 Extension에 대해서 알아본다 1) Extension이란? Extension은 Actor의 기능을 확장하기 위한 구조체로서 기존 Actor의 기능을 수정하거나 직접 상속하지 않고, 독립적인 기능이나 데이터를 추가하여 Actor를 확장하는 모듈화된 확장 단위이다 기존에 사용하던 Component와 Extension을 비교하면 위와 같이 정리할 수 있다Component 방식 : Actor에 구조적으로 부착 + 상태/데이터를 저장 + Replication이 가능 Extension 방식 : Actor를 수정하지 않음 + 조건부로 행위만 주입 + Replication은 불가 Extension을 사용하는 경우 얻을 수 있는 이점을..

스켈레탈 애니메이션의 구현

- 개요간단하게 구성된 씬에서 캐릭터 얼굴이 좌우로 늘어나는 스켈레탈 애니메이션을 구현한다 - 예제 씬을 로딩하는 LoadScene3D 함수의 로직을 위와 같이 구성한다정사각형 메시를 갖고 있는 플레이어를 생성하고 화면 중앙에 위치시킨다 씬을 구성하는 메시를 그리는 DrawMesh3D 함수의 로직을 위와 같이 구성한다그릴 메시가 스킨드 메시인지 확인한 후에 스킨드 메시인 경우 로직을 진행한다본의 바인드 포즈로부터 변화된 최종 위치를 보관할 totalDeltaPosition 로컬 변수를 선언한다정점에 설정된 가중치 정보를 가져오고 w 로컬 변수에 저장한다정점에 연결된 본의 개수를 파악하고 그 개수만큼 반복문을 진행한다가중치 정보에 저장된 본의 이름을 가져와 boneName 로컬 변수에 저장메시에 bone..

스켈레탈 애니메이션

- 개요 게임 수학에 관련된 내용을 종합하여 게임 캐릭터를 구축하는 방법에 대해 알아본다게임에서 캐릭터의 애니메이션은 가상 뼈대인 본을 캐릭터 메시에 심고 본의 움직임에 맞춰 메시가 변형되는 방식을 사용한다이러한 방식을 스켈레탈 애니메이션이라고 표현한다 - 예제로 알아보는 스켈레탈 애니메이션의 구성1) 본의 정보 스켈레탈 애니메이션을 구현하기 위해서는 기존의 메시 체계를 확장하여 본을 추가해야 한다이때 본은 단순히 이동만하는 것이 아니고 크기가 변경되거나 회전도 하므로 본의 정보는 트랜스폼에서 관리한다따라서 Transform 구조체를 사용하여 게임 오브젝트 외에 본의 트랜스폼 정보도 관리한다 2) 바인드 포즈 본을 구성하기 위해서는 3가지 정보가 필요하다본의 배치 정보(=바인드포즈) : 메시에 본이 심어..

유닛 추가 - 7) 송풍기 타워 유닛 추가

- 개요강력한 바람을 내보내어 은신중인 적의 은신상태를 해제하는 송풍기 타워 유닛을 추가한다 - 스크립트 작업1) Player_TowerBase 클래스 CanAttack 함수에 조건을 추가하여 공격할 적이 은신중이 아닌 경우도 판단한다 2) Player_TowerHammer 클래스 GetValidTargets 함수에서 은신 중이 아닌 적들을 포함하도록 수정한다 3) Projectile_Drone 클래스 FindClosestEnemy 함수에 로직을 추가하여 은신 중인 적을 공격 대상으로 삼지 않도록 설정한다 4) Enemy_Base 클래스 적을 은신시키는 기존의 방식을 수정하여 카운터를 계산하여 은신을 적용 / 적용해제하고은신 / 은신해제 카운터를 계산하는 로직과 은신 / 은신해제 VFX 효과를 적용하는 ..

유닛 추가 - 6) 작살 타워 유닛 추가

- 개요비행 적을 대상으로 작살을 발사하여 지속적인 피해를 주면서 속도 감소 디버프를 적용하는 유닛을 추가한다 - 스크립트 작업1) IDamageable 인터페이스 TakeDamage 함수에서 정수값이 아닌 실수값을 인자로 받도록 수정한다 2) Enemy_Base 클래스 적의 조상 클래스에서 TakeDamage 함수를 인터페이스에 맞춰 수정하고체력에 적용하는 값을 RoundToInt 함수를 사용하여 반올림하여 적용하도록 설정한다 3) Enemy_Tank 클래스 동일하게 인터페이스에 맞춰 TakeDamage 함수를 수정하고보호막에 값을 넘겨줄 때는 RountToInt 함수를 사용하여 정수값을 넘겨준다 4) Player_TowerHarpon 클래스 작살 타워 유닛의 클래스를 생성한다멤버변수의 구성은 위와 같..

GameFeatureAction에 대하여

- 개요GameFeature 시스템 내부에서 실질적인 변화를 적용하는 GameFeatureAction에 대해 알아본다 1) GameFeature의 핵심 구조와 생명주기 언리얼 엔진에서 게임의 기능 단위로 사용하는 GameFeature 시스템은 위와 같이 구성되어 있다GameFeature 시스템을 구성하는 3가지 요소는 다음과 같다1) UGameFeatureAction : 게임 기능 추가를 정의하는 가장 작은 실행 단위 2) UGameFeatureSubsystem : 엔진 전역에서 모든 GameFeature 플러그인의 로드와 활성화를 총괄하는 관리자 3) UGameFeatureData : 실행할 Action 목록을 배열로 가지고 있는 핵심 데이터 애셋 또한, GameFeature 시스템의 생명주기는 다음과..

Experience에 대하여

- 개요네트워크 시스템에서 서버와 클라이언트가 동일한 GameFeature를 실행시키기 위한 Experience 시스템을 알아본다 1) Experience 시스템이란? Experience 시스템은 이전의 GameFeature와 동일하게 언리얼 엔진의 모듈형 게임플레이를 추구한다 과거 게임 개발 : 하드코딩 방식의 GameMode 클래스를 사용게임 규칙이 C++ 클래스나 블루프린트에 고정되어 재사용이 어려움Experience 시스템의 도입 : 데이터 기반으로 게임 규칙을 ExperienceData Asset으로 분리 높은 유연성과 재사용을 유지한 채 게임을 개발 예시에서와 같이 하나의 맵에 대해 선택적으로 Experience를 로드할 수 있음 Experience 시스템의 핵심 아키텍처는 레스토랑에 비유하여..

GameFeature에 대하여

- 개요언리얼 엔진에서 제공하는 GameFeature 시스템에 대해서 알아본다 1) 기존 구조의 문제점 위의 이미지는 GameFeature를 사용하지 않는 기존의 개발 방식과 사용하는 방식의 차이점을 정리한 이미지이다기존의 개발 방식에서 발생할 수 있는 문제점은 다음과 같다1) 뒤엉킨 코드 : 이벤트 기간이 종료되도 남아있는 잔여 이벤트 코드나 기능들간의 강한 결합2) 비효율적인 확장 : DLC나 확장팩 개발 시 프로젝트 전체 빌드 그러므로 GameFeature 시스템은 기능의 플러그인화를 바탕으로 동작하므로 기존의 문제를 해결할 수 있다기존 방식과 비교되는 GameFeature의 장점은 다음과 같다각 기능을 독립적인 모듈로 캡슐화하여 관리 런타임 중에 기능을 토글하여 자유롭게 켜고 끌 수 있음 기본 게..

Iris 플러그인에 대하여

- 개요기존 언리얼 엔진의 레플리케이션 시스템을 대체하는 Iris 플러그인에 대해서 알아본다 1) 기존 언리얼 엔진의 네트워크 3단계 계층 구조 기존 언리얼 엔진의 네트워크는 위와 같이 3단계 계층 구조로 표현할 수 있다1) 패킷 - 일반 UDP에 비트 단위로 정보를 저장 2) 번치 - UDP를 보정하여 신뢰성과 순서 보장을 담당하는 단위 3) 채널 - 번치가 누구를 위한 것인지 지정하는 통로 위 3개의 구성 요소 중에서 채널의 ActorChannel이 핵심으로 Replicate된 Actor마다 하나씩 생성되어 변수 업데이트와 RPC 함수를 실행한다 2) 기존 ActorChannel에서의 문제점 그러나 기존에 사용하는 ActorChannel에서는 위와 같은 3개의 문제점이 발생할 수 있다1) Channe..