ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1072)
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (183)
      • Unreal (69)
      • Unity (103)
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (348)
      • C++ (167)
      • C# (90)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • c#
  • string
  • 문자열
  • 그래픽스
  • 배열
  • C++
  • 프로그래머스
  • 오블완
  • C
  • 티스토리챌린지
  • SQL
  • 파이썬
  • Unity
  • 백준
  • 포인터
  • 언리얼
  • 클래스
  • 함수
  • 유니티
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

[Unreal] Actor 와 ActorComponent 의 개념 (vs. Unity 에서의 GameObject 와 비교)
게임엔진/Unreal

[Unreal] Actor 와 ActorComponent 의 개념 (vs. Unity 에서의 GameObject 와 비교)

2023. 10. 26. 12:06

Actor 와 ActorComponent

유니티에서는 게임 오브젝트 아래에 게임 오브젝트를 넣는 식으로 Hierarchy 를 만들어낼 수 있다. 하지만 언리얼은 그런 식으로 동작하지 않는다.

유니티에서는 항공기가 있다고 했을 때, 프리팹에 각종 게임 오브젝트를 하위에 넣어 조합하는 방식으로 해당 오브젝트를 제작할 수 있다. 그런데 언리얼에서 Actor 는 Bucket 같은 개념으로, 다양한 액터 컴포넌트를 담고 있다. 즉, 언리얼은 Bucket 안에 다른 Bucket 을 넣는 방식으로 오브젝트를 생성하지 않는다.

 

액터 컴포넌트는 재사용가능한 기능을 정의하는 컴포넌트에 대한 베이스 클래스로 충돌, 메시, 월드 이동, 소리 재생, 빛과 명암 등의 다양한 기능을 지원한다. 언리얼에서는 트랜스폼을 가진 액터 컴포넌트를 씬 컴포넌트(Scene Component) 라고 하며, 렌더링 가능한 것은 (Primitive Component) 라고 한다.

컴포넌트는 액터 안에 서브 오브젝트로 생성되는 컴포넌트가 인스턴싱될 때, 특정 클래스의 각 액터 인스턴스는 자체적으로 컴포넌트의 고유 인스턴스를 갖는다.

 

대략적인 상속 구조는 다음과 같다.

즉 액터 컴포넌트는 재사용 가능한 특정 기능에 가깝고, 액터는 이러한 기능들을 조합하여 동작 방식에 대한 규칙이 확립된 오브젝트라고 할 수 있다.

예를 들어, "Interaction 이 가능한 액터 구조" 를 설계한다고 가정하자. 해당 기능은 다음과 같이 3가지 방식으로 구현할 수 있다.

  1. 액터를 상속받은 InteractableActor 를 만들어 다른 액터들이 해당 액터를 상속받도록 한다.
  2. ICanInterace 인터페이스를 만들어 인터랙션을 원하는 액터들이 인터페이스를 구현하도록 한다.
  3. InteractableComponent 액터 컴포넌트를 만들어 해당 액터들이 액터 컴포넌트를 담도록 한다.

이 때, 확장성 측면에서 1 보다는 2나 3의 방식을 취하는 것이 낫다. 2를 선택할지 3을 선택할지는 요구조건에 따라 다를 것이다.

 

액터 컴포넌트는 매 Tick 마다 TickComponent 를 통해 업데이트된다. 액터 컴포넌트가 렌더링되려면 Render State 가 생성되어 있어야 하며, 물리 엔진을 통해 시뮬레이션 되도록 하려면 Physics State 가 생성되어 있어야 한다.

씬 컴포넌트는 씬에 배치하거나 붙일(Attach) 수 있다. 붙이려는 액터의 루트 컴포넌트가 SceneComponent 를 베이스로 해야만 붙일 수 있으며, 각 컴포넌트의 부모는 딱 하나뿐이다. 액터는 루트 컴포넌트와 그 트랜스폼에 의존한다.

Primitive Component 는 보통 콜리전 데이터로 사용되고 렌더링되는 지오메트리 유형을 생성하거나 담는 씬 컴포넌트 (Scene Component)이다. Primitive Component 를 상속받은 클래스로 Shape Component 가, Shape Component 를 상속받은 클래스로 BoxComponent 등이 있다.

 

Unreal 에서 Actor 와 ActorComponent 의 개념 (vs. Unity 에서의 GameObject 와 비교) (koreanfoodie.me)

저작자표시 (새창열림)

'게임엔진 > Unreal' 카테고리의 다른 글

[Unreal] 업/다운캐스팅 (Cast 함수) 동작 원리  (0) 2023.10.26
[Unreal] 메모리 관리  (0) 2023.10.26
[Unreal] 가비지 컬렉터 (GC) 정리  (0) 2023.10.26
[Unreal] 클래스 기본 객체 (CDO) + 로딩과정 + 로그디버깅 + 인스턴스 생성  (1) 2023.08.31
[Unreal] 언리얼 빌드 시스템 + Target.cs  (0) 2023.08.28
    '게임엔진/Unreal' 카테고리의 다른 글
    • [Unreal] 업/다운캐스팅 (Cast 함수) 동작 원리
    • [Unreal] 메모리 관리
    • [Unreal] 가비지 컬렉터 (GC) 정리
    • [Unreal] 클래스 기본 객체 (CDO) + 로딩과정 + 로그디버깅 + 인스턴스 생성
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바