1. UPROPERTY의 config 키워드를 사용하려면 UCLASS(config = ini 이름) 지정.

2. ArenaBattleSetting 모듈 -> UABCharacterSetting -> CharacterAssets에 각 Asset이 엔진 시작 시 로딩된다.

언리얼 엔진이 초기화되면 엔진 구동에 필요한 모듈이 순차적으로 로딩된다.

모듈은 자신에게 속한 모든 언리얼 오브젝트의 기본 값을 지정해 생성한다. => 클래스 기본 객체(CreateDefaultObject)

엔진이 초기화되면 모든 언리얼 오브젝트 클래스 기본 객체가 메모리에 올라간 상태이다.

 

메모리에 올라간 클래스 기본 객체는 GetDefault 함수를 사용해 가져올 수 있다.


WRITTEN BY
KeithHong
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )

,

1.추가하고자 하는 모듈의 폴더 생성

 

2. 해당 폴더명과 동일한 아래의 3개 파일 생성하기

 

3. .Target.cs 파일에 아래와 같이 새로 추가된 ExtraModuleName 추가

 

4. 새로 추가된 모듈 cpp 파일에 IMPLEMENT_MODULE 매크로 지정

 

5. .uproject 파일을 열어 아래와 같이 모듈을 추가해준다.

LoadingPhase : 엔진이 로딩 될 때, 프로세스에 로딩되는 순서

 

6. Generate Visual Studio 를 통해 Source 폴더 기준의 새로운 Solution 생성


WRITTEN BY
KeithHong
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )

,
  • BehaviorTree : Blackboard에 저장된 값을 기반으로 AI의 동작을 담당
  • Composite : AI가 어떤 행동을 할 때 선택(Selector) 혹은 순차(Sequence)적으로 작업이 진행되는 것을 위한 룰을 정의하는 Node
  • Decorator : 조건 체크를 통해 해당 Composite 혹은 TaskNode를 실행할지 여부를 판단
  • Service : Interval 마다 호출되어 Composite 혹은 TaskNode 실행에 필요한 Blackboard Data를 갱신
  • BTTaskNode : AI의 행동을 정의
  • Blackboard : AI BehaviorTree의 동작을 위해 값을 기록해 두는 저장 공간

값을 기록하기 위한 Key
Blackboard의 Key를 정의하고 사용한다.
Possess 된 당시의 초기 Position을 HomePos에 값을 세팅해주는 부분
Navigation 5m 반지름 내에서 RandomPosition을 찾아 PatrolPos에 값을 세팅해주는 부분

 

 


GamePlacyTasks 모듈을 등록해야 BTTaskNode를 C++ 코드로 작성하고 빌드할 수 있다.
BlackboardKey 의 값이 변경되면 Notify 하고 즉시 중단한다.

 


WRITTEN BY
KeithHong
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )

,

Animation Blueprint

//Animation Mode Setup
pSkeletalMesh->SetAnimationMode(EAnimationMode::AnimationBlueprint);

//AnimInstanceClass Load
static ConstructorHelpers::FClassFinder<UAnimInstance> WARRIOR_ANIM(TEXT
("AnimBlueprint'/Game/Animation/WarriorAnimBP.WarriorAnimBP_C'"));
if (WARRIOR_ANIM.Succeeded())
{
	pSkeletalMesh->SetAnimInstanceClass(WARRIOR_ANIM.Class);
}

 

* 경로에서 _C 의미

- 블루프린트도 제작된 폰 혹은 위젯 등을 사용하려면 블루프린트 에셋의 클래스 정보를 넘겨주어 사용할 수 있다.

- 언리얼 에셋의 클래스 정보를 가져오는 접미사

 

 

* 게임 엔진의 게임 로직의 실행 순서

매 틱마다

 

입력 시스템 -> 게임 로직 -> 애니메이션 시스템 순으로 로직을 실행한다.

 

게임 로직 단계에서 해당 AnimInstance를 갖고 있는 Pawn이 제거된 경우 유효하지 않은 Pawn에 접근하므로, 사용시 TryGetPawnOwner() 함수를 통해 Valid Check를 해야한다.


WRITTEN BY
KeithHong
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )

,

 

#정의

ArenaBattle.h
-----------------------------------------------------------

#pragma once

#include "EngineMinimal.h"

DECLARE_LOG_CATEGORY_EXTERN(ArenaBattle, Log, All);
-----------------------------------------------------------


ArenaBattle.cpp
-----------------------------------------------------------
#include "ArenaBattle.h"
#include "Modules/ModuleManager.h"

DEFINE_LOG_CATEGORY(ArenaBattle);
-----------------------------------------------------------
#사용 예

Fountain.cpp
-----------------------------------------------------------
UE_LOG(ArenaBattle, Warning, TEXT("Test"));
-----------------------------------------------------------

 

#정의

ArenaBattle.h
-----------------------------------------------------------

#pragma once

#include "EngineMinimal.h"

DECLARE_LOG_CATEGORY_EXTERN(ArenaBattle, Log, All);
#define ABLOG_CALLINFO (FString(__FUNCTION__) + TEXT("(")  \
+ FString::FromInt(__LINE__) + TEXT(")"))

#define ABLOG_S(Verbosity) UE_LOG(ArenaBattle, Verbosity, TEXT("%s"), *ABLOG_CALLINFO)

#define ABLOG(Verbosity, Format, ...) UE_LOG(ArenaBattle, Verbosity, \
TEXT("%s%s"), *ABLOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))
-----------------------------------------------------------
#사용 예

Fountain.cpp
-----------------------------------------------------------
ABLOG_S(Warning);
ABLOG(Warning, TEXT("Test"));
-----------------------------------------------------------

WRITTEN BY
KeithHong
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )

,