본문 바로가기

언리얼C++게임개발/02.액터의 설계

[이득우C++게임개발] 객체 유형과값 유형

언리얼 오브젝트의 속성 값은 객체 유형과 값 유형으로 나뉜다.

값유형은 unint8, int32, float, FString, FName, FVector, FRotator, FTransform등이 있다

이들은 UPROPERTY 매크로를 설정해주면 미리 예약된 기본값이 지정된다. 초기화 하지 않아도 초기값이 지정된다는 것 같다.

 

Fountain.h에 publc: 맨 마지막에 int32 ID를 추가해준다

	UPROPERTY(VisibleAnywhere)
	int32 ID;

빌드해서 언리얼에디터의 디테일에서 확인해보면 비활성화 되어 있다 말그대로 VisableAnywhere 로 설정해서 그런데 어 그런데 액터는 디테일에서 값을 편집하지 않았던가. 사실 객체에서도 StaticMeshComponet를 다른 컴포넌트로 변경할 수는 없다. 다만 컴포넌트에 속한 내용들은 편집이 가능한듯 하다. 

ID를 편집가능하게 하기 위해서는 다음과 같이 선언해준다.

	UPROPERTY(EditAnywhere)
	int32 ID;

 

에셋의 지정

분수의 메시를 StaticMesh컴포넌트에서 검색해서 넣어주었는데 소스코드에서 넣어 보겠다.

디테일 StaticMesh의 폴더 옆 빈곳에 마우스를 올리면 폴더명이 나온다.

우클릭후 Copy를 하면 경로가 카피되고 작은 따옴표 안의 부분만 남겨놓고 나머지는 지운다.

/Script/Engine.StaticMesh'/Game/InfinityBladeGrassLands/Environments/Plains/Env_Plains_Ruins/StaticMesh/SM_Plains_Castle_Fountain_01.SM_Plains_Castle_Fountain_01'

작은 따옴표 안만 남겨둔다.

Game/InfinityBladeGrassLands/Environments/Plains/Env_Plains_Ruins/StaticMesh/SM_Plains_Castle_Fountain_01.SM_Plains_Castle_Fountain_01

이걸 Fountain.cpp의 생성자 맨 마지막에 붙여준다.

소스를 보면 경로의 오브젝트를 찾아 SM_BODY에 넣어준다. 이후 SM_BODY를 Body의 StaticMesh로 지정해준다.

	ConstructorHelpers::FObjectFinder<UStaticMesh> SM_BODY(
		TEXT("/Game/InfinityBladeGrassLands/Environments/Plains/Env_Plains_Ruins/StaticMesh/SM_Plains_Castle_Fountain_01.SM_Plains_Castle_Fountain_01"));
	if(SM_BODY.Succeeded()){
		Body->SetStaticMesh(SM_BODY.Object);
	}

액터의 생성자를 변경했으니까 언리얼에디터를 종료후 VS에서 빌드후 자동로딩한다.

컨텐트드로워의 C++Classes/ArenaBattel/Public으로 이동하면 이미 액터 아이콘에 분수로 바뀌어 있고. 끌어다 레벨에 놓으면 분수가 표시된다. 기억하시는지 모르겠지만 아까는 StaticMesh의 메시를 우리가 골라주었다.

사실 이방법은 하드코딩이라고 현업에서는 잘 사용하지 않는듯하다.

하여간 나머지  메시와 파티클 효과 도 같은 방법으로 소스에 추가해준다.

	ConstructorHelpers::FObjectFinder<UStaticMesh> SM_WATER(
		TEXT("/Game/InfinityBladeGrassLands/Environments/Plains/Env_Plains_Ruins/StaticMesh/SM_Plains_Castle_Fountain_02.SM_Plains_Castle_Fountain_02"));
	if (SM_WATER.Succeeded()) {
		Water->SetStaticMesh(SM_WATER.Object);
	}

	ConstructorHelpers::FObjectFinder<UParticleSystem> PS_SPLASH(
		TEXT("/Game/InfinityBladeGrassLands/Effects/FX_Ambient/Water/P_Water_Fountain_Splash_Base_01.P_Water_Fountain_Splash_Base_01"));
	if (PS_SPLASH.Succeeded()) {
		Splash->SetTemplate(PS_SPLASH.Object);
	}

액터의 생성자를 변경했으니까 언리얼에디터를 종료후 VS에서 빌드후 자동로딩한다.

레벨에 끌어다 확인해본다.