본문 바로가기
Unreal Engine5/메타버스 개발자 경진대회

PlaneLevel 구현. -Actor이동, Camera ViewTarget변경

by wanna_dev 2023. 7. 14.

사용자가 폭탄을 떨어뜨릴 곳을 선택한 후, animation적인 요소를 주기 위한 PlaneLevel을 기획하였다.

따라서 뭔가 플레이 보다는 시네마틱에 가까운 화면을 구현하는 중이다.

 

결과

 

 

 

구현할것

1. asset 배치

2. 비행기이동

3. 카메라이동

4. 배경 계속 나오게

5. 음향효과

6. details -> 비행기의 날개를 접던가 하는..

 

1.번은 다음과 같이 진행했다.

최대한 한국의 산과 비슷해보이는 무료 에셋을 찾아보았다. 전투기도 북한 전투기를 찾아보고 싶었는데.. 쉽지 않아서 합의를 봤다. 전투기 같은건 매니악하신 분들이 많이 있어서 두렵긴 한데 우선 기술위주로 구현하고자 하니 그대로 두기로 했다.

 

 

2. 비행기이동 

비행기 이동은 actor하나를 추가해서 일정한 속도로 나는 것으로 하는것이 좋을 것 같아서 actor하나를 만들었다.

액터를 만든 후, Velocity에 따라서, 액터가 x방향으로 움직일 수 있도록 만들었다.

엑터클래스를 기반으로, BluePrint class를 만들어 메시를 입혀서 사용했다.

// Mobiltech, Inc. All Rights Reserved.


#include "MovingPlane.h"

// Sets default values
AMovingPlane::AMovingPlane()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

}

// Called when the game starts or when spawned
void AMovingPlane::BeginPlay()
{
	Super::BeginPlay();
	StartLocation = GetActorLocation();
}

// Called every frame
void AMovingPlane::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	FVector CurrentLocation = GetActorLocation();

	CurrentLocation = CurrentLocation+(PlaneVelocity * DeltaTime);
	SetActorLocation(CurrentLocation);

}
// Mobiltech, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MovingPlane.generated.h"

UCLASS()
class MTMAPVIEWER_API AMovingPlane : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AMovingPlane();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;
	UPROPERTY(EditAnywhere, Category = "Moving Plane") //blueprint에서도 보이도록 설정 
	FVector PlaneVelocity = FVector(100,0,0);
	UPROPERTY(EditAnywhere)
	FVector StartLocation;
};

3. 카메라이동은 trigger volume을 생성하여, 비행기가 volume안에 들어오면, 비행기의 좌측에서 비행기를 촬영하도록 할 계획이다.

특정 Actor가 Trigger Volume에 들어가면, 이벤트가 발생한다.

 

원하는 구도를 잡아놓고 카메라를 생성한다.

카메라 선택후, Camera에 대한 레퍼런스를 얻어온다.

 

또한 뷰타겟을 변경하는 작업이 필요하다.

 

뷰타겟을 변경하는 주체는 Player Controller이다. Plane Level은 단일사용자이므로 Player  Index 0번을 안심하고 사용하면 된다.

Set View Target with Blend노드를 통해 ViewTarget을 변경한다. Blend는 한번에 확 바꾸는 것이 아닌 보간하여 바꾼다는 의미가 들어간 것 같다.(추측입니다.)

Blend Func를 이용해서 다양한 효과를 줄 수 있습니다. 저는 Ease out 의 5차 도함수 Blend Exp 를 5로 설정해주어 사용하였습니다. 

 

또한 먼 곳에서 카메라가 비행기를 따라가도록 설정했습니다.

 

4. 배경 계속 나오게

비행기가 빠른속도로 지나가버리면, 뒤의 배경을 지우고 앞에 배경을 다시 그려줘야합니다.

 

5. 음향효과는 비행기가 날아갈때 나는 소리와, 지령을 받는 소리 등을 넣을 예정입니다.