Make Unreal REAL.
article thumbnail
이득우의 언리얼 C++ 게임 개발의 정석

 

캐릭터의 공격력, HP 등을 액터 컴포넌트(Actor Component)를 만들어 관리해보도록 한다.

 

새로운 액터 컴포넌트 클래스를 만든다.

 

 

새로운 클래스를 생성했으니 CoreMinimal.h를 ArenaBattle.h로 변경해준다.

 

 

캐릭터 클래스에 방금 생성한 액터 컴포넌트 변수를 만든다.

 

 

헤더를 포함시키고 생성자에서 액터 컴포넌트를 생성한다.

 

 

컴파일하면 캐릭터의 Details 패널에서 액터 컴포넌트가 추가된 것을 볼 수 있다.

  • Transform을 갖는 Scene Component가 아니기 때문에 Root Component가 아닌 액터에 직접 부착된다.

 

 

액터 컴포넌트에서는 매 Tick마다 처리해야 할 로직이 없으므로 Tick을 끄도록 한다.

 

 

액터에서 컴포넌트들을 초기화한 후 호출되는 PostInitializeComponents()에 대응하는 컴포넌트 함수가 컴포넌트를 초기화하는 InitializeComponent() 함수다.

  • 이 함수는 PostInitializeComponents() 함수 직전에 호출된다.
  • bWantsInitializeComponent가 true일 때만 호출된다.

 

 

UPROPERTY의 Transient(휘발성) 키워드

언리얼 오브젝트에는 직렬화(Serialization) 기능이 있어서 UPROPERTY() 매크로가 지정된 프로퍼티를 저장하고 로딩할 수 있다.
하지만 게임이 시작할 때마다 다른 값이 설정되거나 런타임 중에 값이 설정되는 경우 프로퍼티를 보관하는 것은 의미가 없다.
이런 경우 Transient 키워드를 붙여 직렬화에서 제외해 디스크 공간을 낭비하지 않을 수 있다.
  • 항상 0의 초깃값을 갖는다.
  • 일정한 초깃값을 갖지 않고 런타임 중에 값이 설정될 때 사용한다.

 

 

Where to use a Transient variable.

I am confused at which occasions do I make a variable Transient. Mostly as far as I have seen generally replicated variables have transient UPROPERTY attached with it. Any reason behind it? And what exactly does it, like why should we use it? https://docs.

forums.unrealengine.com

현재 레벨과 HP 정보를 스탯 컴포넌트에서 관리하도록 변수와 함수를 추가한다.

  • CurrentStatData는 현재 레벨의 정보를 갖는 FABCharacterData 한 행을 저장한다.

 

 

게임 인스턴스의 데이터 테이블에서 게임 정보를 가져오기 위해 헤더를 포함한다.

 

생성자에서 기본 레벨을 1로 설정한다.

 

 

새로운 레벨과 해당하는 HP를 설정하는 SetNewLevel() 함수를 구현한다.

  • 게임 인스턴스에서 새로운 레벨에 해당하는 정보를 가져와 사용한다.

 

 

InitializeComponent() 함수에서 레벨에 대한 정보로 변수들을 초기화한다.

  • 게임 인스턴스의 생성자는 컴포넌트 초기화보다 먼저 실행되기 때문에 실행 순서로 인한 문제는 발생하지 않는다.

 

 

레벨에 해당하는 HP가 정상적으로 설정되었다.

 

profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그