728x90
반응형
새롭게 안 개념들
Object (UObject)의 개념
- UObject는 언리얼 엔진에서 모든 클래스의 최상위 부모입니다.
- 스스로 월드(레벨)에 배치될 수 없습니다. 주로 데이터나 로직만 담당합니다.
- 예: 플레이어 능력치(HP, 경험치), AI 정보, 게임 설정 값, 임시 계산 로직 등
- 화면에 보이지 않는 추상적인 부분을 처리하는 역할이라고 보면 됩니다.
Actor (AActor)의 개념
- AActor는 UObject를 확장(상속)한 클래스로, 월드에 배치(Spawn) 할 수 있습니다.
- 위치 (트랜스폼), 회전, 크기 등 공간적 정보를 가지고 있고, 여러 컴포넌트 (메시, 파티클, 사운드 등)를 추가로 붙일 수 있습니다.
- 실제 게임 세계에서 보이고 상호작용하는 캐릭터, 적 몬스터, 무기, 조명, 파티클 효과 등은 주로 AActor를 기반으로 제작합니다.
즉 요약하면 UObject 는 데이터와 로직만 담당하는 추상적 클래스를 의미하고 AActor는 월드에 배치 가능하며 시각적,공간적 상호작용을 담당하는 클래스입니다.
Actor 클래스 삭제하는 방법
Visual Studio 솔루션에서 파일 제거
- 언리얼 에디터를 종료합니다.
- Visual Studio를 열어, Solution Explorer에서 삭제할 클래스를 찾습니다.
- .h와 .cpp 파일을 각각 우클릭 → Remove를 선택합니다.
-
- Visual Studio 상단 메뉴에서 File → Save All로 저장합니다.
- 이 작업은 솔루션 (프로젝트 구성 정보)에서만 제거하는 것이므로, 실제 디스크의 파일은 아직 남아 있습니다.
프로젝트 폴더에서 물리적 파일 삭제
- 윈도우 탐색기로 Source/SpartaProject 아래의 Public 혹은 Private 폴더로 이동합니다.
- 방금 Remove했던 .h, .cpp 파일을 직접 삭제합니다.
- 그리고 Visual Studio로 돌아가서 빌드를 한 후, 다시 언리얼 에디터를 실행하면, 해당 클래스가 Content Browser에서도 사라진 것을 확인할 수 있습니다.
- 만약 이 과정을 무시하고 언리얼 에디터에서만 Delete하거나, 솔루션에서 Remove하지 않고 폴더에서만 파일을 삭제하면 빌드 에러 혹은 클래스 미삭제 같은 문제가 생길 수 있습니다.
- 항상 에디터 종료 → 솔루션 Remove → 물리 파일 삭제 → (Visual Studio 빌드) → 에디터 재실행 순서를 지키면 안전합니다.
컴포넌트란?
액터(Actors) 는 어떤 의미에서 컴포넌트라고 하는 특별한 타입의 오브젝트(Ob jects) 를 담는 컨테이너로 생각할 수 있습니다. 다양한 타입의 컴포넌트를 사용하여 액터 의 이동 및 렌더링 방식 등을 제어할 수 있습니다. 또 다른 액터의 주요 기능은 플레이 도중 네트워크를 통해 프로퍼티 및 함수 호출을 리플리케이션 하는 것입니다.
컴포넌트는 생성될 때 자신이 포함된 액터에 연결됩니다.
- 3D 메시를 할당해주기 위해서는 액터에 추가적인 컴포넌트 (Component)를 붙여줘야 합니다.
- 컴포넌트는 언리얼 엔진에서 Actor가 어떤 역할을 하거나 특정 속성을 갖도록 만들어주는 부품 (파츠) 개념입니다.
- 하나의 Actor가 여러 종류의 컴포넌트를 조합하여 다양한 기능을 구현할 수 있습니다.
- 예를 들어, Static Mesh Component + Audio Component + Collision Component를 모두 사용해, 충돌 시 소리가 나는 아이템을 만들 수도 있습니다.
쉬운 말로 컴포넌트란 각 기능을 구성하는 부품이라고 생각하면 됩니다.
루트 컴포넌트와 Scene Component
- 모든 Actor는 최상위 컴포넌트인 **루트 컴포넌트 (Root Component)**를 가져야 합니다.
- Root Component는 액터의 트랜스폼 (위치, 회전, **크기)**를 정의하며, 모든 하위 컴포넌트가 이를 기준으로 동작합니다.
- 일반적으로, Scene Component를 루트로 설정하여 액터의 트랜스폼을 관리하고, 그 아래에 다양한 컴포넌트를 계층적으로 붙입니다.
- Scene Component는 모든 트랜스폼 속성을 가지는 기본 컴포넌트입니다.
- Scene Component는 직접적인 시각적 출력 (3D 모델, 빛 등)을 가지지 않지만, 다른 컴포넌트들의 계층적 트랜스폼을 정의하는 기준점 역할을 합니다.
- Scene Component를 루트로 설정하면, 다른 시각적 컴포넌트를 아래에 Attach하여 관리할 수 있습니다.
Static Mesh Component란?
- 애니메이션 없이 움직임이 없거나 단순 이동·회전만 하는 고정된 (Static) 3D 모델을 표시하는 컴포넌트입니다.
- 건물, 바위, 아이템, 환경 오브젝트 등 움직임이 없거나 단순한 오브젝트에 주로 사용됩니다.
- 3D 모델을 표현하고, 물리 충돌과 관련된 기능도 제공합니다.
메시 및 머티리얼 할당하고 Actor 배치하기
Static Mesh Component의 주요 구성 요소
- Static Mesh (스태틱 메시)
- 3D 모델 (정적 메쉬 데이터)를 정의합니다. 이는 모델 파일이며, 언리얼 엔진에서는 .uasset 파일로 관리됩니다.
- Material (머티리얼)
- 메쉬의 표면 시각적 속성을 정의합니다. 색상, 질감, 반사율, 투명도 등의 속성을 설정할 수 있습니다.
- Static Mesh에는 여러 개의 머티리얼 슬롯이 있을 수 있습니다. 슬롯은 메쉬의 특정 부분에 다른 머티리얼을 적용할 수 있도록 합니다.
Static Mesh 및 Material 설정
#include "Item.h"
AItem::AItem()
{
// Scene Component를 생성하고 루트로 설정
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
SetRootComponent(SceneRoot);
// Static Mesh Component를 생성하고 Scene Component에 Attach
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMeshComp->SetupAttachment(SceneRoot);
// Static Mesh를 코드에서 설정
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/Game/Resources/Props/SM_Chair.SM_Chair"));
if (MeshAsset.Succeeded())
{
StaticMeshComp->SetStaticMesh(MeshAsset.Object);
}
// Material을 코드에서 설정
static ConstructorHelpers::FObjectFinder<UMaterial> MaterialAsset(TEXT("/Game/Resources/Materials/M_Metal_Gold.M_Metal_Gold"));
if (MaterialAsset.Succeeded())
{
StaticMeshComp->SetMaterial(0, MaterialAsset.Object);
}
}
- ConstructorHelpers::FObjectFinder<T>
- Unreal Engine에서 특정 리소스를 경로 기반으로 로드하는 클래스입니다.
- TEXT("/Game/Resources/Props/SM_Chair.SM_Chair"):
- 리소스의 경로를 나타냅니다. 리소스의 경로를 가져오려면 아래와 같이 해당하는 에셋을 우클릭하고 Copy Reference를 해서 붙여넣기를 합니다.
- 단, /Game 여기서부터만 입력하면 되고, 앞에 경로는 삭제를 해줍니다.
- /Game은 Unreal Engine에서 프로젝트의 Content 폴더를 나타냅니다.
- .Succeeded()
- 지정된 경로에서 리소스를 성공적으로 찾았는지 확인합니다.
- 경로가 잘못되었거나 리소스 파일이 누락된 경우 실패하며, 이후 설정 함수가 호출되지 않습니다.
- SetStaticMesh(), SetMaterial()
- 성공적으로 로드된 Static Mesh를 StaticMeshComp에 설정합니다.
- 로드된 Material을 StaticMeshComp의 특정 머티리얼 슬롯에 적용합니다. 여기서는 첫 번째 슬롯 (Index 0)에 Material이 설정됩니다.
728x90
반응형
'언리얼(Unreal) > 엔진' 카테고리의 다른 글
25.01.22 actor의 라이프 사이클 이해 및 thick 함수의 이해 (0) | 2025.01.22 |
---|---|
25.01.10 깃허브데스크탑 사용법 (0) | 2025.01.10 |
24.01.07 언리얼에서의 cpp(언리얼과 비쥬얼 스튜디오 호환 에러 해결법) (0) | 2025.01.07 |
25.01.06 언리얼 cpp 디자인패턴 (0) | 2025.01.06 |
25.01.02 언리얼 cpp STL에 대하여 (0) | 2025.01.02 |