Unreal Engine/C++

입력 장치를 구분하기 게임을 할 때 입력 장치를 키보드와 마우스를 사용하거나 게임패드를 사용하면 입력 장치에 따라 UI가 바뀌는 것을 볼 수 있습니다. 또는 입력 장치에 따라 캐릭터의 이동방식이 변하기도 합니다. 원신의 경우 키보드를 입력 장치로 하여 이동 시 기본적으로 달리기 상태로 이동하지만 별도의 입력으로 걷기 상태로 이동합니다. 게임패드를 입력 장치로 하여 이동 시 조이스틱의 기울기가 전체의 1/3 이상일 경우 달리기 상태로 이동하고 미만일 경우 걷기 상태로 이동합니다. 이처럼 사용자의 입력 장치를 구분하여 여러 방식으로 활용할 수 있습니다. 그러면 사용자의 입력 장치를 구분할 수 있는 방법을 언리얼 엔진 5의 EnhancedInput System을 사용해서 알아보겠습니다. 게임패드의 입력을 구분..
EnhancedInputSystem 언리얼 엔진 4 은 기본 입력 동작 및 축 설정을 프로젝트 세팅에서 설정하여 사용했습니다. 언리얼 엔진 5부터는 지금까지 사용했던 축 및 액션 매핑은 폐기 되고 대신 향상된 입력 액션 및 입력 매핑 컨텍스트(EnhancedInputSystem)를 사용하라고 권고하고 있습니다. 폐기되었다고 축 및 액션 매핑을 사용 수 없다는 것은 아닙니다. 언리얼 엔진 4처럼 사용할 수는 있지만 이후 버전이 올라가면서 버그라던가 업데이트를 지원하지 않는다는 뜻이겠지요. 프로젝트에 따라서 축 및 액션 매핑을 사용하거나, 언리얼 엔진 5에서 사용하는 EnhancedInputSystem을 사용하시면 됩니다. EnhancedInputSystem을 사용할 때 입력 키에 해당하는 입력 값을 받고자..
다음과 같이 선언하면 C++에서 인터페이스 변수를 사용할 수 있다. private: /** Damageable 인터페이스를 가지고 있는 액터입니다. */ UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "BaseHealthBar|DamageableActor", meta = (AllowPrivateAccess = "true")) TScriptInterface DamageableActor; 인터페이스의 함수를 사용하는 방법은 다음과 같다. float UPRBaseHealthBarWidget::GetHealthBarPercent() const { if(HealthBar && IsImplementsDamageableInterface(DamageableAct..
위젯 애니메이션은 시작과 끝에 Delegate를 사용하여 특정 함수를 실행할 수 있습니다. 예를 들어 위와 같이 대미지를 표시하는 폰트는 대미지를 출력한 후 위젯 애니메이션으로 FadeOut 되면서 완전히 사라질 때 위젯 애니메이션의 끝에 선언한 Delegate를 실행하여 폰트를 제거합니다. 이처럼 위젯 애니메이션의 시작과 끝에 Delegate를 사용하여 활용한 코드는 다음과 같습니다. // SampleWidget.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "P..
https://lykanstudio.tistory.com/84 [Unreal Engine 4 Blueprint] TimeStop (시공단열/초산 회피) 몇몇 액션 게임에선 적을 공격을 알맞은 타이밍에 회피하면 시간이 멈춘 것처럼 캐릭터가 멈추거나 느리게 행동합니다. 이런 기능을 언리얼 엔진으로 만드는 법은 다음과 같습니다. ActorComponent lykanstudio.tistory.com 위의 포스팅으로 구현 블루프린트를 C++로 구현한 글입니다. // TimeStopSystemComponent.h UCLASS() class PROJECTREPLICA_API UTimeStopSystemComponent : public UActorComponent { GENERATED_BODY() public: UTi..
UObject에서는 게임 엔진에서 주기적으로 호출되는 함수인 Tick함수가 구현되어 있지 않습니다.(Actor나 Component 클래스에서 구현되어있습니다.) 프로젝트를 진행하면서 캐릭터의 스킬 클래스를 UObject에 상속하여 구현했더니 Tick함수가 필요한 상황이 발생했습니다. UObject에서 Tick함수를 사용한는 법은 다음과 같습니다. // Test.h #include "Tickable.h" class PROJECTTest_API UTest : public UObject, public FTickableGameObject { GENERATED_BODY() public: UTest(); public: /** 사용할 Tick함수 입니다. */ virtual void Tick(float DeltaTi..
C++에서 참조 인자를 가진 함수를 만들어 블루프린트에서 해당 함수를 호출을 하게 되면 다음과 같이 인자의 입력이 아닌 출력을 하는 함수가 만들어진다. UFUNCTION(BlueprintCallable, Category = "Category") void FunctionNameRef(float& ParameterFloat); C++ 함수에서 참조 인자를 받아 함수를 실행한 후 참조 인자를 블루프린트에서 활용을 하겠다면 문제가 없다. 하지만 블루프린트에서 함수를 호출하고 참조 인자를 입력할 때는 문제가 생긴다. 이 때 참조 인자를 const로 받게 되면 문제는 해결된다. UFUNCTION(BlueprintCallable, Category = "Category") void FunctionNameConst(co..
UENUM(BlueprintType) enum EEnumName { EnumName_ZeroUMETA(DisplayName = "Zero"), EnumName_OneUMETA(DisplayName = "One"), EnumName_TwoUMETA(DisplayName = "Two") }; USTRUCT(Atomic, BlueprintType) struct FStructName { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "USTRUCT") TEnumAsByte EnumName; }; 사용하려는 Enum에 TEnumAsByte를 사용합니다. 혹은 enum 뒤에 uint8을 추가합니다. UENUM(Bluep..
한돌이
'Unreal Engine/C++' 카테고리의 글 목록