[UE5]툰 탱크-6

칼든개구리·2024년 12월 9일
0

[언리얼TO리얼]

목록 보기
14/42

앞에서 한 것들을 정리하면
BasePawn 클래스가 있고, 이 클래스에서 두 개의 클래스를 상속할 것이다(탱크, 타워)
BasePawn 클래스에는 메시와 캡슐, 스판 포인트가 있는데 이것은 탱크든 타워든 상속할 수 있다.
하지만 최종으로 구현할 것은 탱크든 타워든 각각 다른 기능을 가지고 있어야 한다.
예를 들면 탱크는 월드 안에서 움직여야 하고 플레이어가 제어하는 대상이 된다. 키보드와 마우스의 입력을 받도록 해야한다. 반대로 타워는 가만히 서있으며 플레이어로부터 아무 입력은 받지 않고 코드로만 제어한다.

탱크와 타워는 다르게 작동해야 하니 먼저 BasePawn을 상속하는 하위 클래스를 만들어서 공통 부분은 상속하고 다른 부분은 각 클래스에 추가한다.

BasePawn을 파생시켜 새로운 c++ 클래스인 Tank를 새로 만들어 준다.
탱크에는 필요하고 포탑에는 필요 없는 것이 뭘까?
탱크를 제어해야 하니 탱크가 돌아다니고 있을 때 탱크에 포커스할 필요가 있다.
필요한 것은 Camera(UCameraComponent), spring arm(USpringArmComponent) 이 컴포넌트를 폰에 추가하면 카메라의 시선으로 폰을 볼 수 있게 된다.

target arm length로 카메라와 폰 거리를 조정할 수 있다

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "BasePawn.h"
#include "Tank.generated.h"

/**
 * 
 */
UCLASS()
class TOONTANKS_API ATank : public ABasePawn
{
	GENERATED_BODY()
public:
	ATank();
private:
	
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"));
	class USpringArmComponent* SpringArm;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
	class UCameraComponent* Camera;

};

탱크의 헤더파일을 작성해주고

// Fill out your copyright notice in the Description page of Project Settings.

#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
#include "Tank.h"

ATank::ATank()
{
	SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("Spring Arm"));
	SpringArm->SetupAttachment(RootComponent);

	Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
	Camera->SetupAttachment(SpringArm);
}

cpp 파일의 생성자도 수정해준다! 근데 원래 있던 탱크는 BasePawn을 부모로 해서 만든건데 다시 만들어야 되나?
아니다! 정답은 탱크의 클래스 세팅에서 부모 클래스를 Tank로 변경해주면 새로 만들었던 카메라도 생기게 되며 있던 메쉬들도 그대로 존재하게 된다.

한가지 주의할 점은 저 카메라 자체의 각도나 위치를 바꾸는 것이 아니라 스프링 암을 이용해서 카메라를 통해 보이는 각도나 길이 등을 조절해야 한다. 왜냐하면 카메라는 스프링 암 컴포넌트의 끝에 둬야하기 때문이다!

오늘은 여기까지! 뭔가를 상속해서 그 기능들은 둔 채로 새로운 c++ 코드를 작성하는 건 즐거운 일인 것 같다!
사전캠프동안 작품을 하나 만들고 싶다는 욕망이 생겼다!

profile
메타쏭이

0개의 댓글