UNREAL/Unreal Study

움직이는 액터

GREEN나무 2024. 5. 7. 13:38
728x90

MyStaticMeshActor로 c++파일 생성 

 

 

 

 

객체에 티킹(Ticking)할 수 있게 만들기

 

생성자에서 틱을 설정하므로 'AMoveingPlatform'입니다

// MovingPlatform.h
#pragma once

#include "CoreMinimal.h"
#include "Engine/StaticMeshActor.h"
#include "MovingPlatform.generated.h"

UCLASS()
class UDEMY_CPPMULTIPLAY1_API AMovingPlatform : public AStaticMeshActor
{
	GENERATED_BODY()
	
public:
	AMovingPlatform();
};

 

생성자는 중괄호로 본문을 묶지만 매개변수와 본문 내용은 없습니다.

primaryActorTick.bCanEverTick은 가본적으로  true 입니다.

// MovingPlatform.cpp
#include "MovingPlatform.h"

AMovingPlatform::AMovingPlatform()
{
	PrimaryActorTick.bCanEverTick = true;
}

 

티킹하는 함수를 오버라이딩 합니다.

매치되는 부모 클래스가 보호되어야 하기떼문에 Tick의 반환 유형은 'virtual void'가 됩니다.

// MovingPlatform.h

UCLASS()
class UDEMY_CPPMULTIPLAY1_API AMovingPlatform : public AStaticMeshActor
{
	GENERATED_BODY()
	
public:
	AMovingPlatform();

	virtual void Tick(float DeltaTime) override; // 추가한 부분
};

 

// MovingPlatform.cpp
#include "MovingPlatform.h"

AMovingPlatform::AMovingPlatform()
{
	PrimaryActorTick.bCanEverTick = true;

	SetMobility(EComponentMobility::Movable); //컴포넌트픞 움직일 수 있게 만듦(=액터 디테일에서 모빌리티를 무버블로 변경)
}

void AMovingPlatform::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	FVector Location = GetActorLocation(); // Actor의 위치를 FVector유형 변수에 저장
	Location += FVector(50*DeltaTime, 0, 0); // Actor의 위치를 초당 X축방향으로 5(cm)만큼 이동
	//  cm/s
	SetActorLocation(Location); // 위치 업데이트
}

 

Super::함수이름();

부모 클래스에 정의되어있는 로직도 실행시키고 내 로직도 실행시키기 위해서 부모 클래스의 같은 이름의 함수를 호출

void AMovingPlatform::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}

 

SetMobility : 스태틱 메시 액터 이동형 변경 기능

 

 

 

https://youtu.be/PZh7YRceJyg

 

 

코드말고 앤진에서도 속도 설정 가능하게 만들기

//.h

public:
AMovingPlatform();

virtual void Tick(float DeltaTime) override;

// 코드말고 앤진에서도 속도 설정 가능
UPROPERTY(EditAnywhere)
float Speed = 100;
};

/********************/

// .cpp

Location += FVector(Speed * DeltaTime, 0, 0);로 수정

 

https://youtu.be/dTCxykvMZTk

 

 

 

지정위치로 이동시키기