개발 철학

 

유니티

바닥부터 끝까지 만들어나간다.

빈 깡통(GameObject)에 컴포넌트를 갖다 붙이면서 만드는 방식. (컴포넌트 패턴 : 부품을 갖다 붙이는것)

 

언리얼

이미 틀이 잡혀있는 상태. 반반이다.

상속구조(즉, 태생)를 정하고 컴포넌트 방식으로 붙여나가면서 완성한다.

각각의 역할에 대한 클래스들이 지정되어 있고 우리는 그것을 상속받아 조립하여 사용하게 된다.

 

언리얼에서 C++ 클래스를 잘못 만든 경우 (잘못 만들거나, rename 해야하는 경우 등등) 일단 언리얼을 꺼야한다...

이후 VS 프로젝트에서도 삭제를 해주고 해당 파일까지 지워준다.

좀 더 깔끔하게 하려면 언리얼 프로젝트의 Binaries, Intermediate, Saved, DerivedDataCache, .vs, 솔루션 파일을 날려준다.

Generate Visual Studio project files를 해주면 프로젝트가 다시 생성이 된다.

 

reflection: 컴파일러가 읽을 수 있는 주석. UCLASS(), UPROPERTY() 등등 이런것들이 일종의 reflection이다.

 

CoreMinimal.h에 온갖 헤더파일이 다 들어가있기 때문에 전부 필요하지 않다면 전방선언 후에 cpp 파일에서 필요한 헤더만 추가해서 사용해주면 된다.

 

 

 

-------------------------

 

 

 

private:
	UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* Mesh;

UPROPERTY의 값을 위와 같이 지정해주면 디테일 창에서 속성들을 활성화 시켜준다.

단, 해당 디테일 창에서 값을 아무리 변경해도 해당 오브젝트만 적용되고 C++ 클래스에는 적용되지 않는다.

 

 

// 생성자에서 작성중
Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MESH"));

위와 같이 TEXT("MESH") 를 사용하는 이유는, 멀티 플랫폼에 대응하기 위한 안전장치이다.

특정 환경에서는 문자 인코딩 방식이 다를수 있기 때문에 환경에 맞춰서 자동으로 인코딩 해주는 기능이라고 보면 된다.

 

 

// 생성자에서 작성중
static ConstructorHelpers::FObjectFinder<UStaticMesh> SM(TEXT("StaticMesh'/Game/StarterContent/Props/SM_Couch.SM_Couch'"));

파일의 경로를 가져오는 것은 콘텐츠 브라우저에서 오브젝트를 고르고 Ctrl+C 하면 경로가 복사되는데 그것을 붙여넣기 하면 된다.

참고) ConstuctorHelpers는 이름 그대로 생성자에서만 사용이 가능하다. CDO 제작에만 사용된다.

ClassFinder는 애셋의 Type 정보를 가져올 때,

ObjectFinder는 애셋의 내용물을 가져올 때 사용한다.

 

런타임에서 애셋을 로딩하려면 StaticLoadObject와 같은 다른 API를 사용하여야 한다.

 

static ConstructorHelpers::FObjectFinder<UStaticMesh> SM(TEXT("StaticMesh'/Game/StarterContent/Props/SM_Couch.SM_Couch'"));
if (SM.Succeeded()) // 파일 불러오기가 성공하면
{
    Mesh->SetStaticMesh(SM.Object); // 메시를 해당 파일로 설정한다
}

 

C++ 코드로 작성한것이 1차적으로 우선 적용되고, 디테일 창에서 변경한 속성들은 나중에 변경한 것들이라 그 후에 적용되지만 해당 액터 하나만 적용되게 된다.

 

 

// 생성자에서 작성중
RootComponent = Mesh;

그리고 컴포넌트를 추가할때는 그중 하나를 RootComponent로 설정해 주어야 한다.

RootComponent는 물리에 반응하는 물체가 된다.

 

 

UPROPERTY(VisibleAnywhere, Category = BattleStat)
int32 Hp;

UPROPERTY(VisibleAnywhere, Category = BattleStat)
int32 Mp;

해당 변수를 디테일 창에 보이고 싶으면 마찬가지로 UPROPERTY로 지정해주면 된다.

 

추가로 Category 지정으로 속성 카테고리 이름을 바꿔줄 수 있다.

VisibleAnywhere로 설정 시, 값을 조절할 수 없지만 EditAnywhere로 바꿔주면 값을 조절할 수 있다.

 

 

+ Recent posts