본문 바로가기

언리얼엔진/c++클래스 만들어보기

언리얼 C++ StaticMesh컴포넌트 추가하기

레벨블루프린트에디터에서 인스턴스에 추가했던 스태틱메시컴포넌트를 이제 C++코드상에서 추가해 보겠습니다.

ClassOnly.h 맨밑에  아래 2줄을 추가해줍니다. 

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;
	UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* Mesh;
};

UPROPERTY(VisibleAnywhere)는 아래 변수를 리플렉션해주는겁니다. 디테일에 표시되게 해주는거죠.
UStaticMeshComponent* Mesh; 컴포넌트의 주소를 담을 포인터를 하나 만들어 줍니다.

 

ClassOnly.cpp를 열어 다음과 같이 아래 2줄을 추가해주빈다.

AClassOnly::AClassOnly()
{
 	// 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;
	Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MESH"));
	RootComponent = Mesh;
}

Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MESH"));  StaticMeshComponent를 하나 만들어 Mesh에 연결해줍니다.
RootComponent = Mesh; Mesh포인터를 루트컴포넌트로 만들어 줍니다. 세이브해준후

 

이제 언리얼로 돌아와 라이브코딩(컴파일)해줍니다.

아웃라이너에서 ClassOnly클래스를 끌어 새로 배치해줍니다. 이번 인스턴스는 Mesh컴포넌트가 이미 추가되어 있고 트랜스폼도 보이지만 여전해 메시데이터가 있지 않습니다.

StaticMesh에 Cone을 설정해주면 뷰포트에 콘이 보입니다.  Location 이 엉망이지만  Begine()에서 다시 설정할것이므로 신경쓰지 않써도 됩니다.

플레이 해주면 콘이 화면 왼쪽에서 오른쪽으로 움직입니다. 클래스와 인스턴스가 좀 감이 잡히시나요?