* 목표

1. AnimNode가 재생되는 흐름을 도메인 모델로 정리

 

AnimNode 동작 및 UAnimationAsset 갱신 처리 흐름

 

  • Loop 아닌 애니메이션 문제

InternalTimeAccumulator 값이 Loop인 경우에만 0으로 초기화가 가능

Loop가 아닌 애니메이션인 경우에는 한번 재생 완료되면 InternalTimeAccumulator 값이 SequenceLength 값으로 고정

재사용을 위해서는 대책이 필요함.
(아직도 어떤 방법이 좋을지 고민중...)

 

대책1. Animation 종료된 다음 재생 시점에 종료된 애니메이션의 경우 TimeAccumulator 값을 초기화
대책2. AnimInstance에서 현재 재생중인 Animation Position을 TimeAccumulator 값으로 세팅

 

 


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

,

* 목표

1. 커스텀 SeqencePlayer 노드를 만들어보면서
AnimGraph가 어떻게 생성되고, 재생되는지 파악

 

AnimBP에서 Node 검색
원하는 Sequence를 재생 시키는 플레이어


AnimBP에 GraphNode로 표현하기 위한 클래스

AnimBP에 Graph로 추가되기 위해 필요한 클래스

- 색상, 툴팁, 카테고리 등 세팅 가능

각 함수의 역할


Seqence Update 시 호출되는 노드 클래스

- Asset의 Node 재생에 필요한 TickRecord 를 생성

- 다음 틱에 재생될 Asset 정보 AnimInstanceProxy에 등록


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

,

 

최대공약수

 

최소공배수

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

인수분해(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
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )

,