Make Unreal REAL.
article thumbnail
애니메이션 몽타주

이득우의 언리얼 C++ 게임 개발의 정석 애니메이션 몽타주(Animation Montage) 상태 머신의 확장 없이 특정한 상황에서 원하는 애니메이션을 발동시키기 위한 기능이다. 여러 개의 애니메이션 클립들의 일부를 떼어내고 붙여서 새로운 애니메이션을 생성하는 기법이다. 애니메이션 몽타주에 사용할 아무 애니메이션 애셋을 연 후 Anim Montage를 만든다. 애니메이션 몽타주는 섹션(Section) 단위로 애니메이션을 관리한다. 애니메이션 몽타주는 최소 1개의 섹션을 갖고 가장 첫 번째 섹션은 무조건 몽타주 시작점에 고정된다. 생성 시에는 Default라는 섹션이 시작점에 고정되어 있다. Details 패널에서 섹션의 이름을 변경할 수 있다. 슬롯에 애니메이션을 드래그해 배치하면 지그재그 형태로 배치된..

article thumbnail
애니메이션 상태 머신

이득우의 언리얼 C++ 게임 개발의 정석 언리얼 엔진의 애님 그래프에서는 상태 머신을 이용해 애니메이션을 관리할 수 있다. 하나의 상태를 스테이트(State)라고 하고 다른 상태로 이동하기 위한 조건을 트랜지션(Transition) 또는 룰(Rule)이라고 한다. Add New State Machine을 클릭해 새로운 상태 머신을 추가할 수 있다. 점프의 경우 체공 시간이 얼마나 걸릴지 예측할 수 없기 때문에 점프 시작, 점프 중, 점프 끝으로 나누어야 한다. 상태를 선택해 애니메이션을 설정할 수 있고, 트랜지션의 둥근 버튼을 눌러 조건을 설정할 수 있다. 좌측의 Animation Graphs 창에서 상태와 조건으로 빠르게 이동할 수 있다. Character 클래스에는 점프를 위한 Jump() 멤버 함수..

article thumbnail
애니메이션 리타겟

이득우의 언리얼 C++ 게임 개발의 정석 Humanoid 캐릭터의 경우 Skeleton 구성이 달라도 애니메이션을 교환할 수 있도록 하는 기능이다. 애니메이션을 교환할 캐릭터들의 Skeleton에서 Retarget Manager를 통해 Humanoid Rig를 선택하고 저장한다. 리타겟할 애니메이션들을 선택하고 Duplicate Anim Assets and Retarget을 선택한다. Skeleton 목록에서 Target 캐릭터에 해당하는 Skeleton을 선택해준다. Replace [] with []을 설정해 애셋 이름을 변경할 수 있다. 아래는 ThirdPerson을 Warrior로 변경했다. Folder를 지정해 Content/Book/Animations에 생성되도록 한다. Content/Book/..

article thumbnail
애님 인스턴스(Anim Instance)

이득우의 언리얼 C++ 게임 개발의 정석 애님 인스턴스 Skeletal Mesh를 갖고 있는 폰의 정보를 받아 애님 그래프가 참조할 데이터를 제공한다. 애님 그래프 애님 인스턴스의 변수 값에 따라 동적인 애니메이션 시스템을 설계하는 공간이다. 새로운 애님 인스턴스를 클래스를 만든다. 생성자, 매 프레임마다 호출되며 Tick과 같은 역할을 하는 NativeUpdateAnimation() 함수를 선언한다. 플레이어의 현재 속력을 저장할 CurrentPawnSpeed 변수는 애님 그래프에서 참조해야 하기 때문에 BlueprintReadOnly 키워드를 지정해준다. 언리얼 엔진은 매 프레임마다 입력 시스템(Input) -> 게임 로직(Tick) -> 애니메이션(Animation) 순으로 처리한다. 입력으로 사용..

article thumbnail
회전 관련 옵션들

이득우의 언리얼 C++ 게임 개발의 정석 Spring Arm->bUsePawnControlRotation 스프링 암이 폰의 Control Rotation에 따라 회전한다. Spring Arm->bInheritPitch 스프링 암이 부모 컴포넌트의 Pitch 회전을 따른다. Spring Arm->bInheritRoll 스프링 암이 부모 컴포넌트의 Roll 회전을 따른다. Spring Arm->bInheritYaw 스프링 암이 부모 컴포넌트의 Yaw 회전을 따른다. Spring Arm->bDoCollisionTest 스프링 암이 벽을 뚫을 수 있는지 여부 bUseControllRotationYaw 폰이 Control Rotation의 Yaw를 따른다. Character Movement 컴포넌트의 Rotati..

article thumbnail
Tick과 Input 이벤트의 순서

이득우의 언리얼 C++ 게임 개발의 정석 Tick과 Input 이벤트 모두 매 프레임마다 실행된다. 다만, 같은 프레임에 호출되더라도 사용자 입력을 먼저 처리한 후 Tick을 호출해 최종 행동을 결정한다. 실험을 위해 Input 이벤트에서 i를 출력한다. Tick에서 ++i를 출력한다. Input 이벤트가 먼저 처리된 후 Tick이 호출됨을 알 수 있다.

검색 태그