본문 바로가기

횡으로 이동하는 바닥 추가

Kwonriver 2022. 6. 14.
728x90

특정 위치에서 횡으로 왔다갔다 하는 액터를 만들어보자.

 

액터를 상속받아 C++ 클래스를 생성한다. 이름은 sinMoveActor로 만들었다. (CosMoveActor로 만들어야하는데 실수했음)

 

#pragma once

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

UCLASS()
class HARDTOGETGOAL_API AsinMoveActor : public AActor
{
	GENERATED_BODY()
	
public:	
	AsinMoveActor();

protected:
	virtual void BeginPlay() override;

public:	
	virtual void Tick(float DeltaTime) override;

	UPROPERTY(EditAnywhere)
		UStaticMeshComponent *MoveActorStaticMeshComponent;

	UPROPERTY(EditAnywhere)
		bool bVertical;		//?? 열거형으로 변경할 것 X, Y, Z 각각 이동

	UPROPERTY(EditAnywhere)
		float MoveSpeed;

	UPROPERTY(EditAnywhere)
		float MoveDistance;

	float MoveTime;
};

 

bVertical은 무시. 이동 축을 변경하기 위한 코드였으나 아직 미완

 

생성자에서는 위 액터의 외형이 되는 UStaticMeshComponent를 생성해주고 멤버변수들의 기본 값 세팅을 해준다.

 

AsinMoveActor::AsinMoveActor()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you dont need it.
	PrimaryActorTick.bCanEverTick = true;

	RootComponent = MoveActorStaticMeshComponent;
	MoveActorStaticMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent"));

	MoveSpeed = 1.0f;
	MoveDistance = 1.0f;
	MoveTime = 0.0f;
	bVertical = true;
}

 

이 액터의 이동은 Tick함수에서 델타 타임에 따라 이동하게 된다. Cos 함수 그래프에 따라 이동하게 된다.

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

	MoveTime += DeltaTime;

	FVector vec = GetActorLocation();
	float moveDist = FMath::Cos(MoveTime * MoveSpeed) * MoveDistance;

	if (bVertical == true)
	{
		vec.X += moveDist;
	}
	else
	{
		vec.Y += moveDist;
	}
	

	SetActorLocation(vec);
}

 

클래스 이름을 sinMoveActor로 지었던 이유가 여기 있다. 액터의 기준점을 시작으로 이동시키려고 0부터 시작하는 Sin함수를 쓰려고 했으나 만들다보니 화면 밖에서 나타나는 바닥이 더욱 좋아 보여서 이동시켰더니 시작점이 끝지점이 되는 바람에 컨트롤이 어려워 Cos 함수로 변경했음. 근데 Sin그래프 이동도 필요할 것 같아서 둘 다 만들까 고민 중...

 

 

728x90

'[Unreal4] > 횡스크롤 맵탈출' 카테고리의 다른 글

밟으면 사라지는 바닥 추가  (0) 2022.06.17
플레이어 이동 추가  (0) 2022.06.13