Actor란?
- 언리얼 엔진에서 콘텐츠를 구성하는 최소 단위의 물체
- 게임 월드의 특정 공간에서 자신에게 주이진 역할을 수행하는 물체를 의미
Component란?
- StaticMesh Component : 애니메이션이 없는 모델링 애셋, 주로 배경 물체에 사용됨
- Skeletal Component : 애니메이션 정보가 있는 모델링 애셋, 주로 캐릭터의 물리기능을 제공하는 모듈
- Collision Component : 물리적 기능을 설정하기 위해 제공되는 모듈
- Camera Component : 가상 세계에서 보여지는 현상을 모니터 화면에 출력해주는 기능의 모듈
- Audio Component : 가상 세계에서 소리를 발생시키는데 사용되는 기능 모듈
- Particle System Component : 이펙트를 화면에 보여주기 위한 기능 모듈
- Light Component : 광원 효과를 부여하는 기능 모듈
- Movement Component : 움직임을 부여하는 기능 모듈
가장 기본적인 StaticMesh Component을 할당해 보자
우선 Fountain이라는 Actor 클래스를 생성한다.
// .h
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* Body;
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* Water;
// .cpp
Body = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BODY"));
Water = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("WATER"));
// 해당 클래스의 기본 컴포넌트를 Body로 설정 후 Water를 Body에 연결한다.
RootComponent = Body;
Water->SetupAttachment(Body);
Fountain내부에 StaticMesh가 잘 생성되었는지 Unreal에서 확인한다.
Unreal에서 Mesh를 선택한다.
특정 Component의 위치지정
Water->SetRelativeLocation(FVector(0.f, 0.f, 135.f));
UPointLightComponent, UParticleSystemComponent 추가해 보기
// .h
UPROPERTY(VisibleAnywhere)
UPointLightComponent* Light;
UPROPERTY(VisibleAnywhere)
UParticleSystemComponent* Splash;
// .cpp
Light = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("LIGHT"));
Splash = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("SPLASH"));
Light->SetupAttachment(Body);
Splash->SetupAttachment(Body);
Light->SetRelativeLocation(FVector(0.f, 0.f, 195.f));
Splash->SetRelativeLocation(FVector(0.f, 0.f, 195.f));
파티클 시스템 변경해 보기
C++ 코드상에서 StaticMesh 지정해 보기
static 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);
}