[ C++ 구현은 Cube를 부모로 하여 상속을 받아서 자식 Cube 생성 ]
더보기
// Cube.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CCube.generated.h"
UCLASS()
class EXAMPLE_API ACCube : public AActor
{
GENERATED_BODY()
protected:
UPROPERTY(VisibleAnywhere)
class USceneComponent* Scene;
UPROPERTY(VisibleAnywhere)
class UStaticMeshComponent* StaticMesh;
public:
ACCube();
};
// Cube.cpp
#include "Vector/CCube.h"
#include "Global.h"
#include "Components/SceneComponent.h"
#include "Components/StaticMeshComponent.h"
ACCube::ACCube()
{
PrimaryActorTick.bCanEverTick = true;
CHelpers::CreateComponent<USceneComponent>(this, &Scene, "Scene", RootComponent);
CHelpers::CreateComponent<UStaticMeshComponent>(this, &StaticMesh, "StaticMesh", Scene);
static ConstructorHelpers::FObjectFinder<UStaticMesh> SM_Asset(TEXT("/Script/Engine.StaticMesh'/Game/Vector/Meshes/Cube.Cube'"));
if (SM_Asset.Succeeded())
StaticMesh->SetStaticMesh(SM_Asset.Object);
}
벡터의 첫번째 성질
위치(Location) + 위치(Location) = 두개의 위치가 합해진 위치(Location)
[ Blueprint 구현 ]
[ C++ 구현 ]
// Cube_Location.h
#pragma once
#include "CoreMinimal.h"
#include "Vector/CCube.h"
#include "CCube_Location.generated.h"
UCLASS()
class EXAMPLE_API ACCube_Location : public ACCube
{
GENERATED_BODY()
public:
ACCube_Location();
protected:
virtual void BeginPlay() override;
private:
FVector Location = { 100, -200, 0 };
};
// Cube_Location.cpp
#include "Vector/CCube_Location.h"
ACCube_Location::ACCube_Location()
{
static ConstructorHelpers::FObjectFinder<UMaterialInstance> M_Asset(TEXT("/Script/Engine.MaterialInstanceConstant'/Game/Vector/Materials/MI_Blue.MI_Blue'"));
if (M_Asset.Succeeded())
StaticMesh->SetMaterial(0, M_Asset.Object);
}
void ACCube_Location::BeginPlay()
{
this->SetActorLocation(this->GetActorLocation() + Location);
}
벡터의 두번째 성질
위치(Location) + ( 방향(Direction) + 거리(Distance) ) = 해당 방향으로 거리만큼 이동한 위치(Location)
[ Blueprint 구현 ]
[ C++ 구현 ]
// Cube_Direction.h
#pragma once
#include "CoreMinimal.h"
#include "Vector/CCube.h"
#include "CCube_Direction.generated.h"
UCLASS()
class EXAMPLE_API ACCube_Direction : public ACCube
{
GENERATED_BODY()
public:
ACCube_Direction();
protected:
virtual void BeginPlay() override;
private:
FVector Direction = { 1, 1, 0 };
float Distance = 200;
};
// Cube_Direction.cpp
#include "Vector/CCube_Direction.h"
ACCube_Direction::ACCube_Direction()
{
static ConstructorHelpers::FObjectFinder<UMaterialInstance> M_Asset(TEXT("/Script/Engine.MaterialInstanceConstant'/Game/Vector/Materials/MI_Red.MI_Red'"));
if (M_Asset.Succeeded())
StaticMesh->SetMaterial(0, M_Asset.Object);
}
void ACCube_Direction::BeginPlay()
{
this->SetActorLocation(this->GetActorLocation() + (Direction.GetSafeNormal() * Distance));
}
벡터의 세번째 성질
A의 위치(Location) - B의 위치(Location) = B가 A를 바라보는 방향(Direction)
[ Blueprint 구현 ]
[ C++ 구현 ]
// Cube_Trace.h
#pragma once
#include "CoreMinimal.h"
#include "Vector/CCube.h"
#include "CCube_Trace.generated.h"
UCLASS()
class EXAMPLE_API ACCube_Trace : public ACCube
{
GENERATED_BODY()
public:
ACCube_Trace();
protected:
virtual void Tick(float DeltaSeconds) override;
protected:
UPROPERTY(EditInstanceOnly)
class AActor* OtherActor;
private:
float Speed = 100;
float Distance = 200;
};
// Cube_Trace.cpp
#include "Vector/CCube_Trace.h"
#include "Kismet/KismetSystemLibrary.h"
ACCube_Trace::ACCube_Trace()
{
static ConstructorHelpers::FObjectFinder<UMaterialInstance> M_Asset(TEXT("/Script/Engine.MaterialInstanceConstant'/Game/Vector/Materials/MI_Green.MI_Green'"));
if (M_Asset.Succeeded())
StaticMesh->SetMaterial(0, M_Asset.Object);
}
void ACCube_Trace::Tick(float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
if (!!OtherActor)
{
FVector ToDistance = OtherActor->GetActorLocation() - this->GetActorLocation();
float DelSpeed = DeltaSeconds * Speed;
if (GetDistanceTo(OtherActor) > Distance)
this->SetActorLocation((DelSpeed * ToDistance.GetSafeNormal()) + this->GetActorLocation());
else UKismetSystemLibrary::QuitGame(GetWorld(), nullptr, EQuitPreference::Quit, false);
}
}
'Development > Unreal Lab' 카테고리의 다른 글
[SeSAC, Unreal] 2025. 03. 18 (0) | 2025.03.18 |
---|---|
[Unreal Graphics] 효과,이펙트 (Effect) (0) | 2025.03.06 |
[Unreal Plugin] Basic Example Plugin (0) | 2025.03.04 |
[Unreal Graphics] 라이팅 (Lighting) (0) | 2025.03.04 |
[Unreal Graphics] 머티리얼 (Material) (0) | 2025.02.27 |