게임엔진/Unreal
[Unreal] EnhancedInput 시스템이란?
언리얼 엔진 5의 Enhanced Input 시스템은 기존의 입력 시스템(Input System)을 대체하여 보다 유연하고 강력한 입력 처리를 제공한다. 이 시스템은 다양한 입력 디바이스를 통합 관리하고, 더 복잡한 입력 매핑과 처리 로직을 지원한다. Enhanced Input의 주요 개념Input Mapping Contexts:입력 맵핑 컨텍스트는 여러 입력 액션(Input Actions)을 그룹화하는 역할을 한다.특정 상황이나 상태에서 활성화될 수 있으며, 여러 컨텍스트를 겹쳐 사용할 수 있다.예를 들어, 걷기 상태와 운전 상태에 따라 다른 입력 맵핑 컨텍스트를 사용할 수 있다.Input Actions:입력 액션은 단일 입력 이벤트(키 누르기, 마우스 클릭 등)를 나타낸다.디지털 입력(키보드, 버튼..
[Unreal] 애님 블프 Idle 애니메이션 무작위 실행
언리얼에선 Random Sequence Player 함수가 존재하며 배열 범위 안에 무작위 인덱스 값을 뽑아준다. 일단 3개를 추가해줬다 마지막으로 shuffle mode 칸이 체크가 되어있어야 한다
[Unreal] C++ error C2018 : '' 문자를 인식할 수 없습니다 오류 해결
아래와 같이 한글로 작성할 시 여러 오류가 뜨는데 이는 컴파일러가 한글을 인식못해서 발생하는 오류다 고급 저장 옵션에서 UTF-8로 변경해야 오류를 쉽게 해결할 수 있다, 만약에 파일 탭 클릭 후 보이지가 않는다면 아래 방법을 통해 설정하면 된다 UTF-8로 변경 후 빌드가 제대로 되는 모습이다
[Unreal] C++ 변환할 수 없습니다 오류 해결
SetRootComponent(GetCapsuleComponent()); UCapsuleComponent 뿐만 아니라 다른 컴포넌트들을 인식 못하기 때문에 발생하는 오류이다. 해당 컴포넌트 헤더파일을 추가해주면 된다 #include "Components/CapsuleComponent.h"
[Unreal] Reflection (리플렉션)
언리얼은 UHT(Unreal Header Tool) 을 이용해 클래스 계층 구조, 멤버 변수/함수 등의 정보를 UClass 에 저장한다. 이를 리플렉션이라고도 하고, 프로퍼티 시스템이라고도 부른다. 리플리케이션 시스템은 부가 기능으로, 리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아두면 UHT 가 컴파일시 해당 정보를 수집하게 된다. 프로퍼티 시스템 계층 구조는 아래와 같다. (UField 아래에 UStruct, UEnum, UProperty 가 있음) #include "MyObject.generated.h" UCLASS(Blueprintable) class UMyObject : public UObject { GENERATED_BODY() public: MyUObject(); UP..
[Unreal] 비동기 에셋 로딩
UE4에서 애셋 비동기 로딩을 쉽게 하기 위한 신규시스템이 도입되었다. 데이터 로드 및 참조에 사용되는 방법은 일반적으로 두가지가 있다. FSoftObectPath와 TSoftObjectPtr FSoftObjectPath는 애셋의 전체이름이 저장된 스트링이있는 구조체이다. 애셋의 참조 정보와 생성 메소드들을 포함한다. 에디터에서는 UObject처럼 표시된다. TSoftObjectPtr은 FsoftObjectPath를 감싸는 TWeakObjectPtr 이다. 에디터 UI에서 특정 클래스만 선택되게끔 제한하도록 하는 역할. 블루프린트에서 애셋의 SoftReference로 표시 애셋 레지스트리와 오브젝트 라이브러리 애셋 레지스트리는 애셋에 대한 메타데이터를 저장하여, 검색 및 질의를 가능하게 한다. 에디터에서..
[Unreal] 엔진에서 제공하는 데미지 라이브러리
데미지를 주는 함수의 종류 ApplyDamage : 기본적인 데미지 함수. ApplyPointDamage : 데미지를 주는 위치의 정보도 얻어올 수 있는 데미지 함수. (어디서 데미지를 주었는지.) ApplyRadialDamage : 범위 데미지를 줄 때 사용. (Origin으로부터 Radius만큼 데미지를 뿌린다.라는 느낌.) 데미지를 받는 함수의 종류 블루프린트 : AnyDamage 노드, PointDamage 노드, RadialDamage 노드. (쓰기 쉬우라고 구분되어 있음.) C++ : Actor 클래스의 TakeDamage 함수 오버라이딩. (함수 내에서 구분해서 처리함.) float ACPP_Player::TakeDamage(float DamageAmount, FDamageEvent cons..
[Unreal] 미니맵 및 캐릭터 위치 표시
화살표 스프라이트 세팅 우선 화살표 스프라이트를 준비해준다, 구글에서 대충 이미지를 다운로드 받아 폴더에 드래그 앤 드롭해주면 Texture 형태로 로딩될텐데 그 후 우클릭 > Paper2D > Sprite 눌러서 생성해준 후 아래 부분을 세팅한다. 세 가지의 컴포넌트가 필요하다 SpringArmComponent PaperSpriteComponent USceneCaptureComponent2D C++로 추가해줬다 .h 파일에 추가 UPROPERTY(EditAnywhere, Category = Minimap) USpringArmComponent* SpringArm; UPROPERTY(EditAnywhere, Category = Minimap) USceneCaptureComponent2D* SceneCapt..
[Unreal] Programming Subsystem (프로그래밍 서브시스템)
1. 서브시스템 여기서 GameInstance 서브시스템을 커스터마이징했을때, 커스터마이징한 서브시스템의 수명은 class UMyGameSubsystem : public UGameInstanceSubsystem 위 예제 코드처럼 베이스 클래스에서 파생된 클래스를 생성하면 다음 스텝으로 수명이 관리된다. UGameInstance 생성 이후, UMyGameSubsystem 인스턴스 역시 생성한다. UGameInstance 초기화시, UMyGameSubsystem 인스턴스에서 Initialize()가 호출된다. UGameInstance 종료시, UMyGameSubsystem 인스턴스에서 Deinitialize()가 호출된다. Deinitialize()가 호출된 시점에서 UMyGameSubsystem 인스턴스에..
[Unreal] Level Blueprint 를 C++로 접근하기
기본적으로 Level Blueprint는 ALevelScriptActor, 즉 Actor 형식이다. 이를 상속받아 새로운 Level Actor를 생성한다. 자신의 LevelScriptActor에서 추가한 함수가, Level Blueprint에서도 보일 수 있게 수정할 수 있다. 다음은 Actor들의 Reference를 받아 Destroy 시키는 DestroyActors 함수이다. 자신의 LevelScriptActor에서 작성한 함수가 Level Blueprint에서 보이려면 UFUNCTION과 Specifier 작성 필수이다. 눈에 띄는건 DestroyActors의 UPARAM(ref) 이라는 매크로인데, 이는 함수가 받는 인자가 Blueprint 상에서는 왼쪽 에서 와야 한다는 뜻이다. ( -> 즉 U..