최대공약수

 

최소공배수

'프로그래밍 > 알고리즘' 카테고리의 다른 글

인수분해(Factorization) 알고리즘  (0) 2020.02.11

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

,
  • Blackboard
    • AI 행동을 위해 필요한 정보를 기록해두는 데이터 센터

다양한 키를 추가 할 수 있고, 해당 키를 BTTask에서 참조할 수 있도록 세팅한다.

  • Behavior Tree
    • AI의 행동을 트리 형태의 구조로 표현한 Asset

하나의 AI가 행동하는 것을 보여주는 Behavior Tree

 

  • AI Perception
    • AI가 Sight, Damage, Hearing 등등의 Sense에 따라 반응 할 수 있도록 구현된 Component

For Monster

AI Perception

 

 

  • AI Perception StimuliSource
    • AI Perception에 의해 반응을 활성화 시켜주는 Component 플레이어나 NPC에게 추가하여, 어떤 Sense에 대해 몬스터가 반응할 지 등록해 사용하는 Component

For Player

Perception 활성화 컴포넌트


  • BTTaskNode
    • AI의 행동을 정의

BTTask에서 사용될 변수
BT에서 Blackboard의 값을 세팅하기 위해 인스턴스 편집 가능 옵션을 체크해준다.

Task 내부에서 사용할 변수를 세팅하고, 인스턴스 편집 가능으로 세팅해주어야 원하는 데이터를 Blackboard의 값으로 세팅할 수 있다.

 

 

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

 

 

C++에서 처리하는 방식은 추후에 기록 예정


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

,

목표

1. Android Studio 3.5.3 인스톨

2. Android Device 셋업

3. Unreal Andoroid 셋업

 

Android Studio 3.5.3 인스톨

Android 3.5.3 설치하는 이유. 4.25에서 안드로이드 NDK 버전 업데이트 되었다.
Android Stuiod 설치
OS에 맞는 Installer 파일 설치

 

Android Studio 3.5.3

 

Android 스튜디오 다운로드 자료실  |  Android 개발자  |  Android Developers

이 페이지에는 Android 스튜디오 릴리스 관련 다운로드 자료가 포함되어 있습니다.

developer.android.com

 

Android Device 셋업

  • 설정 -> 개발자 옵션 -> USB 디버깅 활성화

 

Unreal Android 셋업

프로젝트 셋팅 -> Android -> SDK 라이선스 수락

 

 

  • Android SDK 경로 셋업

1. AppData 폴더의 SDK 경로 지정

2. jre 폴더 경로 지정

 


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

,

- 문제점

생성자에서 Owner를 멤버 필드로 캐싱해 두는 경우 주소가 달라지는 현상

- Character는 ItemComponent를 멤버 필드로 가지고 있으며, 생성자에서 CreateDefaultSubobject를 통해 생성.

- BaseComponent에서 Component의 Owner인 Character를 멤버 필드로 캐싱

 

* BeginPlay에서 Character의 Address와 ItemComponent의 RefernceCharacter Address가 다른 현상 발생

 

 

 

 

 

 

 

- 결론

BP로 상속된 클래스의 경우 멤버 필드로 레퍼런싱을 하고자 할 때, BeginPlay에서 작업하자.

혹은, C++ 클래스를 기반으로 생성된 BP는 BP내부에서 레퍼런싱 해서 사용하자.

혹은, BP 상속 없이 순수 C++ 클래스로 사용하자.

PackageLoad, Default BP 생성 등 불필요한 작업이 없어 순수 의도대로 코드를 구현할 수 있다.

 

  • 관련 로그 정리
더보기
// Editor 실행 후 최초 Play 로그
BaseComponent Name : ItemComponent ,OwnerName : Default__BP_Character_C, Owner Address : 4414eb00
BaseComponent Address : 44201d80 ,OwnerName : Default__BP_Character_C, Reference_Character Address : 4414eb00
Character(31)CONSTRUCT OwnerName : Default__BP_Character_C, Address : 4414eb00
Character(32)CONSTRUCT ItemComponent  : ItemComponent, Address : 44201d80 // ReferenceCharacter : 4414eb00

BaseComponent Name : ItemComponent ,OwnerName : Default__SKEL_BP_Character_C, Owner Address : 7f259d00
BaseComponent Address : 44151a80 ,OwnerName : Default__SKEL_BP_Character_C, Reference_Character Address : 7f259d00
Character(31)CONSTRUCT OwnerName : Default__SKEL_BP_Character_C, Address : 7f259d00
Character(32)CONSTRUCT ItemComponent  : ItemComponent, Address : 44151a80 // ReferenceCharacter : 7f259d00

BaseComponent Name : ItemComponent ,OwnerName : Default__BP_Character_C, Owner Address : 321c3900
BaseComponent Address : 1752a080 ,OwnerName : Default__BP_Character_C, Reference_Character Address : 321c3900
Character(31)CONSTRUCT OwnerName : Default__BP_Character_C, Address : 321c3900
Character(32)CONSTRUCT ItemComponent  : ItemComponent, Address : 1752a080 // ReferenceCharacter : 321c3900
// 최초 실행 시 위의 세번의 Constructor 호출이 발생
1. 최초 실행 시 EditorGameInstance를 생성하면서 Package Load
2. Blueprint Compile 시 Skeleton Class Generate 시 호출(?)
3. PlayActor Spawn 시 호출

Default__SKEL_BP_Character_C는 무엇인가?
BP에서 Skeleton Class를 Generate 할 때 생성되는 Bp인데...?


// 이후 Play 로그
LogLoad: Game class is 'BP_GameMode_C'
BaseComponent Name : ItemComponent ,OwnerName : BP_Character_C_0, Owner Address : 32253900
BaseComponent Address : 54f8400 ,OwnerName : BP_Character_C_0, Reference_Character Address : 32253900
Character(31)CONSTRUCT OwnerName : BP_Character_C_0, Address : 32253900
Character(32)CONSTRUCT ItemComponent  : ItemComponent, Address : 54f8400 // ReferenceCharacter : 32253900

//BeginPlay에서 달라지는 Reference_Character 주소값 확인
//최초 실행 시 생성된 Default__BP_Character_C의 주소를 참조하도록 변경
BaseComponent::BeginPlay(23)BEGINPLAY BaseComponent Address : 54f8400 ,OwnerName : Default__BP_Character_C, Reference_Character Address : 321c3900

//현재 Component Owner의 정상적인 주소
Character::BeginPlay(46)BEGINPLAY OwnerName : BP_Character_C_0, Address : 32253900
Character::BeginPlay(47)BEGINPLAY ItemComponent    : ItemComponent, Address : 54f8400 // ReferenceCharacter : 321c3900

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

,

목표

- AssetTypeAction 클래스를 생성하고, UAsset이 정상적으로 생성되는지 확인

 

 

CharacterSetting 클래스

  • GetName() : UAsset의 메뉴에 출력되는 이름 및 기본으로 Thumnail에 출력될 이름
  • GetTypeColor() : UAsset의 색상
  • GetSupoortedClass() : Factory 클래스와 동일한 경우에만 메뉴에 표기
  • GetActions() : 내용 추가 예정
  • GetCategoried() : 어떤 메뉴 Categories 에 추가될 것인지

 

정상적으로 메뉴에 나타나는 결과


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

,

목표

- AdvancedAssetCategory에 Custom Category 추가하기

 

1. AdvancedAssetCategory란?

Contents 폴더에서 우클릭으로 UMG나 Material, Foliage 관련 UAsset을 추가할 때 사용하는 메뉴

EAssetTypeCategories::Type HelperAssetCategoryBit AssetCategory에 사용될 타입

RegisterAdvancedAssetCategory : ProjectD_Helper 이름의 Category Type을 등록

비트 연산으로 사용중이지 않은 다음 비트에 CustomCategory Type을 추가해줌

RegisterAssetTypeAction : UAsset ActionType을 추가

Factory 클래스를 상속받는 CharacterSetting 클래스를 생성 할 수 있도록 등록

 

Module Shutdown 시 Custom하게 등록했던 AssetTypeAction 정리

 


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

,

목표

- Implement_module 세팅

- Startup Module / Shutdown Module 함수 호출

 

 

ModuleManager에서 모듈을 로드할 때 IModuleInterface를 상속받은FProjectD_Helper 클래스로 Module을 로드

StartupModule / ShutdownModule 을 통해서 모듈 초기화 및 정리


  • StartupModule 호출부
더보기

FModuleManager::LoadModuleWithFailureReason

엔진 로드 될 때, 모듈 초기화 작업 시 Helper_Module override 함수 호출


 


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

,

목표

- 새로운 모듈을 추가해보자

(참고, 필수가 아니다)

디폴트 모듈 추가해보기

1. 모듈이란?

UnrealEngine에서 관련 클래스들의 모음 DLL과 비슷하다.

 

* 사전 정의
모듈화하여 프로그램을 작성해두면 프로그램의 명세에 변경이 있어도 관계가 있는 모듈의 변경만으로 끝나고, 프로그램 개발의 생산성
이 향상

* 언리얼 모듈 정의
클래스들의 모음

  • 새로운 모듈을 추가하기 위해 ProjectD_Helper 폴더 생성
  • 새로운 모듈을 구성하기 위한 필수 파일 생성

 


  • 모듈명.Build.cs
  • 모듈명.cpp
  • 모듈명.h

 

.uproject 파일에 새로운 모듈 추가

 

  • GameLogic Target의 ExtraModule 및 Dependency

GameLogic에서는 참조하지 않을 Editor와의 Dependency 정리

 

  • Editor Target의 ExtraModule 및 Dependency

DependencyModule에 UnrealEd추가

  • UnrealEd : 언리얼 에디터에서 사용되는 Factory클래스, Builder 등등이 모여있는 Module로 보임.
  • PublicIncludePaths : VS의 IncludeDirectory 와 같은 역할을 해주는 컨테이너
  • DependencyModuleNames : ProjectD_Helper Module에서 사용하고자 하는 Module을 추가하여, 접근할 수 있다.

Game_Helper_Module이 Game_Module을 포함하는 모습

 


- Android 빌드 테스트 시, UnrealEd에 관련된 Error 발생

GameLogic target file에서 UnrealEd 모듈을 참조하고 있어서 발생 된 에러

ProjectD 모듈의 Dependency 컨테이너
ProjectD_Helper의 Dependency 컨테이너

다음에 계속


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

,

목표

- Custom UAsset을 생성해보자!!

최종 결과물

 

1. Custom UAsset이란?

DataTable / WidgetBlueprint / BlendSpace 등과 같은 UAsset을 만드는 것

 

2. UFactory

UFactory 클래스

* 모든 UAsset의 기본 Factory 클래스로 UAsset을 만드는 경우 Factory 클래스를 상속.

내부에 다양한 가상 함수들이 존재한다.

 

UAsset을 사용하기 위해 가장 기본적으로 Override 되어야 할 함수

- Factory Class의 생성자

Supported Class를 지정해주고, 새로 생성될 것인지 Flag를 세팅해준다.

- FactoryCreateNew

UAsset을 통해 생성하고자 하는 UObject를 Return 해준다.

 

  •  SupportedClass를 잘못 세팅하는 경우(아래의 더보기 클릭)
더보기
Factory의 잘못된 SupportedClass 세팅
Factory 구성 시 AssetTypeAction의 Support Class 체크
등록한 AssetTypeAction을 순회하면서 Factory 클래스가 Support 하는 클래스와 같은 것이 있는지 파악

 

 

 

 

 

4.24에서는 위의 세팅만으로 Category -> Miscellaneous 에 출력 되었으나

4.25로 버전이 올라가면서 자동으로 Miscellaneous에 등록되지 않는 것으로 보인다.

'프로그래밍 > 언리얼엔진' 카테고리의 다른 글

[UE4] 나만의 UAsset을 만들어보자 - 3  (0) 2020.09.11
[UE4] 나만의 UAsset을 만들어보자 - 2  (0) 2020.09.11
[UE4] Delegate  (0) 2020.03.09
[UE4] UPROPERTY 매크로  (0) 2020.03.08
[UE4] Log 남기기  (0) 2020.02.23

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

,

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

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

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

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

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

 

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


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

,