
UE5-17 C++ 프로그래밍 퀵스타트(1) 에 이어 직접 해보기라는 항목을 진행할 것이다
프로그래밍 퀵스타트 | 언리얼 엔진 5.3 문서 (unrealengine.com)
- 첫 번째, FloatingActor에 파티클 붙이기
- 두 번째, FloatingActor의 이동 속도를 하드 코딩이 아닌 프로퍼티로 만들어서 디테일 패널에 공개하고 사용하기
- 세 번째, X축과 Y축에 움직임 추가하기
첫 번째로 파티클부터 추가해 보자
저번과 마찬가지로 파티클 시스템을 하나 만들기 위해서 생성자 함수에 UParticleSystemComponent 타입으로 ParticleSystem 프로퍼티를 만들어준다
소스파일에서 파티클을 추가하기 위해 #include "Particles/ParticleSystemComponent.h" 헤더를 먼저 넣어준다
그리고 CreateDefaultSubobject를 통해 컴포넌트로 만들어주고, 이것을 VisualMesh의 하위 폴더로서 부착해 준다
이제 ParticleSystem 프로퍼티에 파티클을 넣어줄 차례이다
VisualMesh에 큐브 메시를 부착했듯이, 콘텐츠 브라우저 패널에서 [StarterContent > Particles] 폴더 안에 들어가 보면 여러 에셋이 있는 것을 확인할 수 있는데, 여기서 P_Fire이라는 이름의 불 파티클을 사용해 볼 것이다
ConstructorHelpers 클래스에 있는 FObjectFinder를 이용하여 P_Fire이라는 이름의 파티클을 ParticleSystemAsset 변수에 넣어주고, 만약 파티클 할당이 성공적으로 되었다면 ParticleSystem에 부착해 준다
아래의 ParticleSystem->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f)); 가 주석 처리 되어있는 이유는 루트 컴포넌트인 VisualMesh의 위치를 이미 같은 코드로 (0, 0, 0)으로 지정해 줘서 생략이 가능하기 때문이다. 즉 하위에 포함되어 있는 ParticleSystem은 루트 컴포넌트와 다른 위치로 지정하지 않은 한 굳이 작성해 줄 필요가 없다
코드를 작성하면 모두 저장하고 컴파일 해준다
그리고 액터를 뷰포트에 끌어 넣으면 큐브가 화려하게 불타오르기 시작한다
게임을 플레이시켜보면 파티클 역시 큐브를 따라서 움직이는 것을 볼 수 있다
이번엔 두 번째, 큐브의 이동 속도를 하드 코딩이 아닌 프로퍼티로 만들어서 디테일 패널에 공개해서 사용하기이다
스크립트 에디터로 돌아가서 FloatingActor의 헤더 파일로 간다
액터의 움직임 속도를 결정할 변수로 float 타입의 FloatingSpeed 변수와 RotationSpeed 변수를 만들고 20.0으로 초기화한다
그리고 언리얼 에디터에서 공개하기 위해서 UPROPERTY 매크로를 선언하고 지정자로 EditAnywhere과 BlueprintReadWrite, Category = "FloatingActor를 넣어준다
소스파일의 Tick함수에서 원래 20.0f라고 적힌 부분을 FloatingSpeed 변수와 RotationSpeed 변수로 각각 바꿔준다
이제 에디터에서 공개로 바꿔둔 변수들을 변경해 주면 액터의 속도가 변할 것이다
코드를 [Ctrl + Shift + 'S']로 모두 저장하고 언리얼 에디터로 돌아가서 컴파일한다
컴파일이 끝나면 FloatingActor를 선택하고 디테일 패널을 보면 아래쪽에 FloatingActor 카테고리에 있는 프로퍼티들을 볼 수 있다
게임을 플레이시키고 FloatingSpeed 값을 변경하면 실시간으로 액터가 위아래로 움직이는 속도가 달라지는 것을 볼 수 있다
[게임 플레이 후 마우스 커서를 띄우고 싶을 때는 Shift + F1 키를 누르고 아웃라이너에서 FloatingActor을 선택 후 변경하면 된다]
마지막으로 세 번째, X축이나 Y축 움직임을 추가해 보자
각 축마다 다른 속도를 가지기 위해 RunningTime을 FVector 타입으로 바꾸어 따로 저장해야 할 것 같다
우선 헤더파일에서 FloatingSpeed 프로퍼티를 각 축마다 따로 사용하기 위해 FVector 타입으로 바꿔주고 초기화를 위해 (0, 0, 0) 값을 넣어준다
그다음에는 float타입으로 CurrentTime 변수를 선언해서 GetGameTimeSinceCreation( ) 함수를 넣어주고, RunningTime는 FVector 타입으로 바꿔서 각각 게임이 진행되고 흐르는 시간 값들을 넣어준다
DeltaHeight를 DeltaX, DeltaY, DeltaZ로 변경하고 각각 축의 움직임을 구하도록 변경한다
마지막으로 이렇게 구한 DeltaX, Y, Z를 NewLocation 변수에 저장해 준다
코드를 작성하면 모두저장하고 언리얼 에디터로 이동하여 컴파일한다
그리고 FloatingActor를 선택하고 디테일 패널을 보면
float 타입이었던 FloatingSpeed가 FVector 타입으로 변경되어 X축, Y축, Z축 값을 각각 설정해서 액터를 움직일 수 있게 되었다
FloatingSpeed 프로퍼티의 X,Y,Z 값을 변경하고 게임을 시작하면 축마다 다른 움직임을 보이는 것을 볼 수 있다
VR게임 개발을 위한 언리얼엔진/C++ 공부한 내용 끄적이기...
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!