https://youtu.be/_G0_9tUjaRs?si=eu1vj4mJ_4h7ipQr 캐릭터의 앞에 일정 높이 이하의 장애물이 있으면, 장애물을 뛰어넘는 기능을 구현했습니다. 기능 설명 캐릭터의 앞에 뛰어 넘을 수 있는 장애물이 있는지 Trace를 사용하여 탐색합니다.뛰어 넘을 수 있는 장애물이 있을 경우 장애물의 깊이를 Trace를 사용하여 계산합니다.장애물의 끝에서 일정 거리 떨어진 부분으로 애니메이션을 재생하며 캐릭터를 이동시킵니다. 구현장애물 탐색 캐릭터의 위치를 TraceStart로 설정하고 TraceStart에서 캐릭터의 전방으로 VaultableObjectTraceDistance만큼 떨어진 거리를 TraceEnd로 설정하여 Trace를 실행합니다. ..
전체 글
GameProgramer 취업준비 중 onestone3647@gmail.com입력 장치를 구분하기 게임을 할 때 입력 장치를 키보드와 마우스를 사용하거나 게임패드를 사용하면 입력 장치에 따라 UI가 바뀌는 것을 볼 수 있습니다. 또는 입력 장치에 따라 캐릭터의 이동방식이 변하기도 합니다. 원신의 경우 키보드를 입력 장치로 하여 이동 시 기본적으로 달리기 상태로 이동하지만 별도의 입력으로 걷기 상태로 이동합니다. 게임패드를 입력 장치로 하여 이동 시 조이스틱의 기울기가 전체의 1/3 이상일 경우 달리기 상태로 이동하고 미만일 경우 걷기 상태로 이동합니다. 이처럼 사용자의 입력 장치를 구분하여 여러 방식으로 활용할 수 있습니다. 그러면 사용자의 입력 장치를 구분할 수 있는 방법을 언리얼 엔진 5의 EnhancedInput System을 사용해서 알아보겠습니다. 게임패드의 입력을 구분..
EnhancedInputSystem 언리얼 엔진 4 은 기본 입력 동작 및 축 설정을 프로젝트 세팅에서 설정하여 사용했습니다. 언리얼 엔진 5부터는 지금까지 사용했던 축 및 액션 매핑은 폐기 되고 대신 향상된 입력 액션 및 입력 매핑 컨텍스트(EnhancedInputSystem)를 사용하라고 권고하고 있습니다. 폐기되었다고 축 및 액션 매핑을 사용 수 없다는 것은 아닙니다. 언리얼 엔진 4처럼 사용할 수는 있지만 이후 버전이 올라가면서 버그라던가 업데이트를 지원하지 않는다는 뜻이겠지요. 프로젝트에 따라서 축 및 액션 매핑을 사용하거나, 언리얼 엔진 5에서 사용하는 EnhancedInputSystem을 사용하시면 됩니다. EnhancedInputSystem을 사용할 때 입력 키에 해당하는 입력 값을 받고자..
애니메이션 스테이트 이벤트 애니메이션 스테이트 섹션의 이벤트들에 경고 문구가 표시되어있다. 애님 노드 함수 버전을 사용하라는데 스테이트 노드를 더블클릭한 후 출력 노드를 확인해보면 State 섹션에서 함수를 바인딩해서 사용하면 된다.
루트 모션 애니메이션을 사용할 때 캐릭터의 스켈레톤에 Root Bone이 필요합니다. 위와 같이 Root Bone이 없는 스켈레톤을 Blender에서 Root Bone을 추가해보겠습니다. Blender의 왼쪽 상단에서 Object Mode를 Edit Mode로 변경해줍니다. 그리고 키보드의 'Shift' 키를 누른 상태에서 'A' 키를 누릅니다. 그러면 Bone이 하나 생깁니다. 우측의 새로 만든 Bone을 클릭하고 키보드의 'Shift' 키를 누른 상태에서 Hips도 클릭한 다음 마우스를 모델이 있는 화면으로 가져와 키보드의 'Ctrl' 키를 누른 상태에서 'P' 키를 누릅니다. Keep Offset을 클릭합니다. Bone이 Hips의 부모가 됩니다. Bone의 이름을 변경하고 Expo..
.pmx 파일은 언리얼 엔진에 임포트를 할 수 없습니다. 그래서 Blender나 3DMax 같은 프로그램을 통해 .fbx 파일로 변환하여 임포트 해줘야 합니다. 그 중 Blender를 사용하여 .pmx 파일을 .fbx 파일로 변환하여 언리얼 엔진에 임포트하는 방법을 사용하겠습니다. 시작하기에 앞서 다음과 같은 준비물이 필요합니다. .fbx 파일로 변환할 .pmx 파일 Blender 3.6.x Cats Blender Plugin Development .pmx 파일은 각자 개인이 원하시는 캐릭터의 .pmx 파일을 사용하시면 됩니다. Bldner의 경우 3.5나 3.6버전을 사용하시면 됩니다. 필자의 경우, 3.6버전의 최신버전인 3.6.8버전을 사용했습니다. 다운로드는 아래의 공식홈페이지에서 다운 받으시면 ..
다음과 같이 선언하면 C++에서 인터페이스 변수를 사용할 수 있다. private: /** Damageable 인터페이스를 가지고 있는 액터입니다. */ UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "BaseHealthBar|DamageableActor", meta = (AllowPrivateAccess = "true")) TScriptInterface DamageableActor; 인터페이스의 함수를 사용하는 방법은 다음과 같다. float UPRBaseHealthBarWidget::GetHealthBarPercent() const { if(HealthBar && IsImplementsDamageableInterface(DamageableAct..
https://youtu.be/-JDrNxF66qM?si=MOYP5CafxU-dsULo 캐릭터나 사물에 가하는 대미지를 처리하는 시스템입니다. 클래스 관계도는 다음과 같습니다. 대상에게 대미지를 전달할 때, 대상에게 Interface_PRDamageable 인터페이스가 존재하는지 확인한 후 존재할 경우 Interface_PRDamageable의 TakeDamage 함수로 대미지의 정보를 나타내는 PRDamageInfo 구조체를 전달합니다. 대미지를 전달하는 PRDamageInfo 구조체의 구조는 다음과 같습니다. Amount: 대미지 양입니다. DamageType: 대미지의 유형입니다. Melee: 근거리 공격으로 인한 대미지입니다. Projectile: 원거리(투사체) 공격으로 인한 대미지입니다. En..