๐ก C++๋ก ์กํฐ์ Transform์ ์กฐ์ํด๋ณด์.
C++์ ์ฌ์ฉํด์ ๋ ๋ฒจ์ ๋ฐฐ์นํ ์กํฐ๋ฅผ ์์ง์ฌ ๋ณด๊ฒ ์ต๋๋ค.
1. C++ ์ฝ๋๋ก ์กํฐ ์์ฑ
2. ์กํฐ Transfrom ์กฐ์
3. ์กํฐ ํ์ ๊ฐ์
์ด๋ฒ์๋ C++๋ก ์กํฐ์๊ฒ ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํ๊ณ ,
Transform์ ์กฐ์ ํด์ ๋ ๋ฒจ์์ ๊ฐ์ง๊ณ ๋์ ๋ณด๊ฒ ์ต๋๋ค.
์ฌ๋ฐ๋ ์ฅ์ ๋ฌผ๋ค์ ๊ตฌํํ ์ ์์ ๊ฒ๋๋ค.
MyActor๋ก ์์ฑํด์ค๊ฒ์.
๋ธ๋ฃจ ํ๋ฆฐํธ์์ ์ปดํฌ๋ํธ์ Addํ๋ ๊ณผ์ ์ ๋๋ค.
Static Mesh Component๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ณ์๋ฅผ ์ ์ธํด์ฃผ๊ฒ ์ต๋๋ค.
UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
GENERATED_BODY()
// ์๋ต
public:
UPROPERTY(VisibleAnywhere,Category=MyValue)
class UStaticMeshComponent* staticMesh;
};
Static Mesh Component ๋ฅผ ์์ฑํ์ฌ ์ฃผ๊ณ ,
Root Component์ ํ์์์๋ก ๋ฃ์ด ์ฃผ๊ฒ ์ต๋๋ค.
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
staticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
staticMesh->SetupAttachment(RootComponent);
}
๋ธ๋ฃจํ๋ฆฐํธ์ Details์์ ์ค์ Static Mesh๋ฅผ ํ ๋นํ๋ ๊ณผ์ ์
๋๋ค.
๋จผ์ ์ธ๋ฆฌ์ผ ์๋ํฐ์์ Static Mesh ํ๋ธ์ ๋ ํผ๋ฐ์ค๋ฅผ ๋ณต์ฌํด์ ๊ฐ์ ธ์ค๊ฒ ์ต๋๋ค.
๊ฒ์ํด์ ๋ง์์ ๋๋ ๊ฑธ๋ก ๊ฐ์ ธ์ ์ฃผ์ธ์
ConstructorHelpers์ FObjectFinder๋ฅผ ํตํด ํ ๋นํ Static Mesh๋ฅผ ์ฐพ์ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Text ์์ Cube์ ๋ ํผ๋ฐ์ค๋ฅผ ๋ฃ์ด ์ฃผ์ธ์.
// Sets default values
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
staticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
staticMesh->SetupAttachment(RootComponent);
// ์ฝ๋ ์ถ๊ฐ
ConstructorHelpers::FObjectFinder<UStaticMesh> cubeMesh(TEXT("/Script/Engine.StaticMesh'/Game/StarterContent/Shapes/Shape_Cube'"));
}
cubeMesh ํธ์ถ์ด ์ฑ๊ณตํ๋ฉด SetStaticMesh์ ํตํด ํ ๋นํด์ค๋๋ค.
// Sets default values
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
staticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
staticMesh->SetupAttachment(RootComponent);
ConstructorHelpers::FObjectFinder<UStaticMesh> cubeMesh(TEXT("/Script/Engine.StaticMesh'/Game/StarterContent/Shapes/Shape_Cube'"));
// ์ฝ๋ ์ถ๊ฐ
if (cubeMesh.Succeeded())
{
staticMesh->SetStaticMesh(cubeMesh.Object);
}
}
โ์ ์ฅ ํ ์คํโํ๊ณ Class๋ฅผ ์ฐํด๋ฆญํด์ Blueprint๋ก ์์ฑํด์ฃผ์ธ์.
๊ฐ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ๋ก StaticMesh์ ํ๋ธ๊ฐ ํ ๋น๋์๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
Viewport์ ํ๋ธ๊ฐ ์์ต๋๋ค!
์ค์ ๋ก ๋ ๋ฒจ์ ๋ฐฐ์นํด๋ ํ๋ธ๊ฐ ์๋๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
์๊น ์ฐ๋ฆฌ๊ฐ ํ๋ธ์ ๋ ํผ๋ฐ์ค๋ฅผ ๋ณต์ฌํด์ TEXT์ ํ ๋น ํด์ฃผ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ณต์ฌํ ๊ฒฝ๋ก๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
/Script/Engine.StaticMesh'/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube'
๊ฐ์ฅ ๋ค๋ฅผ ๋ณด๋ฉด /Shapes/Shape_Cube.Shape_Cube๋ก ์ด๋ฆ์ด 2๋ฒ ์์ต๋๋ค!
์ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ด ์ํ๋ก ๊ทธ๋๋ก ์ปดํ์ผํ๋ฉด ํธ์ถ์ ์คํจํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
๊ทธ๋์ ์ด๋ฆ์ ํ๋ฒ ์ง์ด ๋ ํผ๋ฐ์ค๋ฅผ ์ฌ์ฉํด์ฃผ๋ฉด ํด๋น ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋ง์ด์ฃ
/Script/Engine.StaticMesh'/Game/StarterContent/Shapes/Shape_Cube'
์ด๊ฒ์ผ๋ก Static Mesh Component์ ํ๋ธ๋ฅผ C++์ฝ๋๋ก ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ ๋ณด์์ต๋๋ค.
๋ค์์ ํด๋น ์กํฐ์ Transform์์๋ฅผ ์กฐ์ํ์ฌ ๋ณด๊ฒ ์ต๋๋ค.
1. C++ ์ฝ๋๋ก ์กํฐ ์์ฑ
2. ์กํฐ Transfrom ์กฐ์
3. ์กํฐ ํ์ ๊ฐ์