Crypt Raider#4

Kimbab1004·2024년 2월 11일
0

UnrealEngine

목록 보기
8/35


이번에는 자동으로 벽이 내려가면서 통로가 열리는 것과 석상을 추가하였다.

통로가 열리면서 아래로 내려가는 것을 원하였기에 Mover 라는 c++ Class를 제작하였다.

//Mover.cpp
#include "Mover.h"
#include "Math/UnrealMathUtility.h"

// Sets default values for this component's properties
UMover::UMover()
{
	// Set this component to be initialized when the game starts, and to be ticked every frame.  You can turn these features
	// off to improve performance if you don't need them.
	PrimaryComponentTick.bCanEverTick = true;

	// ...
}


// Called when the game starts
void UMover::BeginPlay()
{
	Super::BeginPlay();

	OriginalLocation = GetOwner()->GetActorLocation();

	// ...
	
}

//컴포넌트를 통해 액터에게 사운드를 부여하거나 액터의 위치를 파악하거나 설정하는 등의 작업을 수행할려면 포인터를 액터에게 먼저 전달해야한다.
// Called every frame
void UMover::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
	Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
	if (ShouldMove){
	FVector CurrentLocation = GetOwner()->GetActorLocation();
	FVector TargetLocation = OriginalLocation + MoveOffset;
	float Speed = FVector::Distance(OriginalLocation, TargetLocation) / MoveTime;

	FVector NewLocation = FMath::VInterpConstantTo(CurrentLocation, TargetLocation, DeltaTime, Speed);
	GetOwner() -> SetActorLocation(NewLocation);
	}
}
//Mover.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "Math/UnrealMathUtility.h"
#include "Mover.generated.h"

UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class CRYPTRAIDER_API UMover : public UActorComponent
{
	GENERATED_BODY()

public:	
	// Sets default values for this component's properties
	UMover();

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

public:	
	// Called every frame
	virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;

private:
	UPROPERTY(EditAnywhere)
	FVector MoveOffset;

	UPROPERTY(EditAnywhere)
	float MoveTime = 4;

	UPROPERTY(EditAnywhere)
	bool ShouldMove = false;
	FVector OriginalLocation;
};

그리고 석상을 추가해 바라보는 시각과 현재 시간을 OUTLOG에 표출되게 하였다.

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


#include "Grabber.h"
#include "Engine/World.h"
#include "DrawDebugHelpers.h"

// Sets default values for this component's properties
UGrabber::UGrabber()
{
	// Set this component to be initialized when the game starts, and to be ticked every frame.  You can turn these features
	// off to improve performance if you don't need them.
	PrimaryComponentTick.bCanEverTick = true;

	// ...
}


// Called when the game starts
void UGrabber::BeginPlay()
{
	Super::BeginPlay();

	// ...
	
}


// Called every frame
void UGrabber::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
	Super::TickComponent(DeltaTime, TickType, ThisTickFunction);

	FRotator MyRotation = GetComponentRotation();
	FString RotationString = MyRotation.ToCompactString();
	UE_LOG(LogTemp, Display, TEXT("Grabber: %s"),*RotationString);
	// ...

	FVector Start = GetComponentLocation();
	FVector End = Start + GetForwardVector() * MaxGrabDistance;
	DrawDebugLine(GetWorld(),Start,End, FColor::Red);
	//float time = GetWorld()->TimeSeconds;
	//UE_LOG(LogTemp, Display,TEXT("Current Time is : %f"),time);
}

Unreal Engine#7에서 생긴 문제를 해결하기 위해 오늘 많은 시간을 할애하였다. 결국 문제를 해결하지는 못했지만 문제의 원인을 찾는데에는 성공했다.

1. VScode에서 컴파일 중엔 오류가 없었지만 표시상으로는 여러 오류가 나왔었다.

이를 해결하기 위해서 공식 문서, 레딧 등을 참고하였고 결국 유튜브를 통해 찾을 수 있었다.


해결 방법을 통해 나를 비롯한 수많은 사람들이 도움을 받은 모습이다.

'

2. 게임 시작했을때 Player가 움직여 지지 않은 문제

문제의 원인을 찾기 정말 힘들었다.

결국 커뮤니티의 도움을 받아 원인을 찾을 수 있었다.


원인은 IMC_Default에 이동과 관련된 설정이 매핑되어 있지 않아 생긴 문제였다.

아래와 같이 매핑을 하나하나 추가하는 것은 무리가 있을 것임으로 다른 프로젝트에서 First_control과 관련된 파일을 복사해 붙여넣는 방식으로 해결해 볼까 싶다.

0개의 댓글