[Unreal Engine 4 C++] 컴포넌트 생성(CreateDefaultSubobject, NewObject)

2020. 11. 25. 01:32· Unreal Engine/C++

 컴포넌트를 생성할때 CreateDefaultSubobject를 사용했었습니다. 그러나 CreateDefaultSubobject는 생성자에서만 사용할 수 있습니다.

 검의 양끝에 BoxComponent를 부착하고 이 두 BoxComponent 사이에 일정한 간격으로 특정 개수의 BoxComponent를 부착하는 기능을 구현하려고 할 때 평소에 사용하던 CreateDefaultSubobject는 사용할 수 없었습니다.

검의 양끝에 있는 BoxComponent

 이를 구현하기 위해서는 게임을 시작할 때 또는 게임을 플레이 중일때 BoxComponent를 생성하여 부착해야 했습니다.

블루프린트에 존재하는 BoxCollision을 추가하는 노드

 블루프린트에는 BoxCollision을 추가하는 노드가 블루프린트 전용으로 존재하였습니다. 하지만 C++로 구현할 계획이기에 해결하는데 오랜시간이 걸렸습니다.

 BeginPlay함수에서 BoxComponent를 생성하여 액터에 부착하겠습니다.

 

 생성자 이외의 공간에서 컴포넌트를 생성하기 위해서는 NewObject를 사용합니다.

docs.unrealengine.com/en-US/API/Runtime/CoreUObject/UObject/NewObject/3/index.html

 

NewObject

Convenience template for constructing a gameplay object

docs.unrealengine.com

template<class T>
T * NewObject
(
    UObject * Outer,
    const UClass * Class,
    FName Name,
    EObjectFlags Flags,
    UObject * Template,
    bool bCopyTransientsFromClassDefaults,
    FObjectInstancingGraph * InInstanceGraph
)

<함수 원형>

 매개변수 중 Outer, Class, Name만 사용합니다.

Outer NewObject로 생성되는 컴포넌트를 붙일 오브젝트입니다. 간단하게 this를 입력하면 됩니다.
Class NewObject로 생성할 컴포넌트의 Static클래스입니다.
Name NewObject로 생성할 컴포넌트에 적용할 이름입니다.
UBoxComponent* NewTraceCollision = NewObject<UBoxComponent>(this, UBoxComponent::StaticClass(), FName(*Name));
if (NewTraceCollision != nullptr)
{
	NewTraceCollision->RegisterComponent();
	NewTraceCollision->AttachTo(Root);
	NewTraceCollision->SetRelativeTransform(CalculateTraceCollisionSpawnOffset(index));
	TraceCollisions.Add(NewTraceCollision);
}

<구현 예시>

 

 NewObject로 컴포넌트를 생성하고 이를 RegisterComponent함수로 등록합니다.

docs.unrealengine.com/en-US/API/Runtime/Engine/Components/UActorComponent/RegisterComponent/index.html

 

UActorComponent::RegisterComponent

Register this component, creating any rendering/physics state.

docs.unrealengine.com

 

 이제 이를 바탕으로 BeginPlay또는 다른 함수에서 구현하고 하는 기능을 실행하면 된다.

 

BeginPlay에서 실행한 결과


참고

answers.unrealengine.com/questions/286630/component-added-at-runtime-doesnt-have-beginplay-c.html

cafe.naver.com/unrealenginekr/15390

저작자표시 (새창열림)

'Unreal Engine > C++' 카테고리의 다른 글

[Unreal Engine 4 C++] 비헤이비어 트리 관련 기능 모듈 추가  (0) 2020.12.09
[Unreal Engine 4 C++] 내비게이션 사용 시 모듈 추가  (0) 2020.12.09
[Unreal Engine 4 C++] class 키워드와 전방선언  (0) 2020.11.08
[Unreal Engine 4 C++] 범위 기반 For 루프  (0) 2020.11.04
[Unreal Engine 4 C++] 유효성 검사, nullptr과 IsValid 그리고 Pending Kill  (0) 2020.10.30
'Unreal Engine/C++' 카테고리의 다른 글
  • [Unreal Engine 4 C++] 비헤이비어 트리 관련 기능 모듈 추가
  • [Unreal Engine 4 C++] 내비게이션 사용 시 모듈 추가
  • [Unreal Engine 4 C++] class 키워드와 전방선언
  • [Unreal Engine 4 C++] 범위 기반 For 루프
한돌이
한돌이
GameProgramer 취업준비 중 onestone3647@gmail.com
한돌이
Lykan Studio
한돌이
전체
오늘
어제
  • 분류 전체보기 (102)
    • Daily Life (0)
    • Project (15)
      • Replica (10)
      • CE (1)
      • T (4)
    • Unreal Engine (74)
      • C++ (40)
      • Blueprint (5)
      • AI (5)
      • Effect (3)
      • UMG (2)
      • Error (2)
      • etc. (16)
    • Study (8)
      • C++ (2)
      • Algorithm (0)
      • API (4)
      • Git (2)
    • etc. (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • etc.
  • Unreal Engine 4 C++
  • 오류
  • Unreal Engine 4
  • daily life
  • Unreal Engine etc.
  • ProjectT
  • project
  • Unreal Engine4 Effect
  • Study
  • threadsafe
  • UnrealEngine4
  • Unreal Engine
  • ADB
  • ProjectReplica
  • Project T
  • .etc
  • Project Replica
  • Unreal Engine 4 Error
  • c++
  • API
  • Unreal Engine4
  • error
  • GIT
  • 자소서
  • ETC
  • Unreal Engine 5

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
한돌이
[Unreal Engine 4 C++] 컴포넌트 생성(CreateDefaultSubobject, NewObject)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.