묻공러
'게임 엔진/[코드조선] 언리얼' 카테고리의 글 목록

게임 엔진/[코드조선] 언리얼

게임 엔진/[코드조선] 언리얼

언리얼 Game Data - Game Module

C++ 프로젝트의 모듈C++ 코드를 작성하지 않는 블루프린트 프로젝트는개발자가 직접 모듈을 추가할 수 없다반면, C++ 프로젝트는 개발자가 직접 모듈을 추가하고 임포트 할 수 있다언리얼 C++ 모듈 언리얼 엔진의 소스코드는 모두 모듈 단위로 구성되어 있다 모듈은 소스파일의 컴파일 결과물이다모듈 단위로 작성된 C++ 소스코드를 컴파일 결과물은 에디터용으로 .dll 파일과실행 파일용으로 .lib가 생성된다즉, 모듈을 컴파일해서 언리얼 에디터 혹은 실행 파일에 우리가 작성한 로직을 반영할 수 있다 언리얼 C++ 모듈 소스코드 관리 언리얼 C++ 모듈 소스코드도 결국 프로젝트 폴더 > Source 폴더에 저장되어야 한다그렇게 저장된 Source 폴더의 소스코드들을 바탕으로 UBT는 플랫폼(Win, Mac, …)..

게임 엔진/[코드조선] 언리얼

언리얼 Game Data - ActorComponent

ActorComponent특정 액터에 원하는 기능을 부여하기 위한 컴포넌트이다대부분의 컴포넌트들은 기능이 정해져 있었지만ActorComponent를 상속받아 우리가 직접 기능을 구현해 넣어주면 된다StatComponent 캐릭터와 몬스터의 스탯을 관리하기 위해 직접 만들어준 ActorComponet로이벤트(피격, 스킬 사용, …)에 의해 액터의 스탯이 변경되면 델리게이트에 바인드 된 함수를 통해 액터의 스탯 변경을 알리게 만들 수 있다Transient 키워드 ActorComponent를 상속받은 StatComponet에서 Current-가 붙은 속성들은 계속 정보가 바뀌는 변수이다이러한 속성의 경우는 .csv 파일에 저장되거나 읽어오지 않는다따라서 굳이 Serialize 될 필요가 없다 이러한 속성들에는..

게임 엔진/[코드조선] 언리얼

언리얼 Game Data - GameInstance

데이터 클래스 게임에 사용될 데이터가 여러 개체에 저장된다면각 개체 속성 간의 동기화 문제가 발생한다따라서, 게임 내에서 단 하나의 개체로 관리되는 싱글톤 패턴 객체가 필요하다언리얼 싱글톤 클래스를 사용하면 되고 엔진 초기화 때부터 게임 종료까지 유지된다 언리얼 싱글톤 클래스 언리얼에서 제공되는 싱글톤 클래스는 총 4가지 종류가 있다1. 게임 인스턴스 2. 에셋 매니저 3. 게임 플레이 관련 액터 (ex. GameMode, GameState, …) 4. 직접 프로젝트에 싱글톤을 등록한 언리얼 오브젝트 클래스 직접 등록하는 방법은 Settings > Project Settings > Engine > General Settings > Default Classes Advanced 탭에 Game Singleto..

게임 엔진/[코드조선] 언리얼

언리얼 AI - Decorator

Decorator Blackboard의 값을 기반으로 특정 Composite Task의 수행 분기를결정하는 부분으로 조건문, 조건식의 개념이다 Decorator 주의점Decorator을 사용할 때는 Notify Observer와 Observer aborts 설정에 따라결과가 달라질 수 있음을 유의해야 한다  Notify Observer Notify Observer를 On Value Change로 설정하는 경우에는해당 키 값의 변경이 감지되면, Notify Observer가 발생한다 Notify Observer를 On Result Change로 설정하는 경우에는조건식의 결과가 변경되는 경우에 Notify Observer가 발생한다 예를 들어, x > 1.0f라는 조건식을 가정하에는x가 0.8f에서 0.9f..

게임 엔진/[코드조선] 언리얼

언리얼 AI - Blackboard Key

AIController 설정BlackBoard와 Behavior Tree를 사용하기 위해서는AIController 블루프린트 클래스에 Blackboard와 BehaviorTree를 지정해야 한다또한, Blackboard Data Asset도 지정해야 한다Blackboard에서 사용할 Data들을 쉽게 관리하기 위해Blackboard Data Asset을 사용한다 Blackboard keyBlackboard에는 특정 유형의 데이터를 저장하고 이를 BehaviorTree에서 활용할 수 있다블랙보드에서 > New Key > 원하는 타입을 지정해 추가할 수 있다   Blackboard Component 연동 및 SetValue()그리고 이러한 Blackboard key를 cpp에서 활용하기 위해서는 AICont..

게임 엔진/[코드조선] 언리얼

언리얼 AI - Behavior Tree, Blackboard

FSM상태 노드들을 연결하여 인공지능을 설계하는 방식이다모든 상태 노드들에 상하 관계가 없는 수평 구조이다즉, 모든 상태 노드에서 모든 상태 노드로 전환이 가능하고 구현이 쉽다하지만, 상태 노드가 많아질수록 굉장히 복잡해지는 문제가 발생하다Behavior Tree 우선순위와 트리 구조를 사용해서 인공지능을 설계하는 방식이다상하 관계가 있는 수직 구조이다상위 상태 노드(Composite Task)들은 서브 상태 트리(Child Task)의 동작 여부를 결정한다하위 상태 노드(Child Task)들은 자신이 맡은 작업만 수행하는 구조이다적절한 규칙을 통해서 노드가 많아져도 가독성이 높다하지만, 규칙과 다양한 노드들의 용도를 알아야 해서 구현하기가 약간 까다롭다Blackboard Behavior Tree의 판..

게임 엔진/[코드조선] 언리얼

언리얼 AI - AIController

AIController폰은 플레이어 컨트롤러에 의해 수동적으로 조종된다반면, 플레이어를 제외한 나머지 폰들은 인공지능이 폰을 제어하도록 AIController를 설정해야 하고Behavior Tree 모델을 사용해서 인공지능 설계가 가능하다NavMeshNPC가 스스로 움직이기 위해 지원되는 기능 중 대표적인 것은Navigation Mesh이다Place Actors > Volumes > NavMeshBoundsVolume을 ViewPort에 배치할 수 있다기준점을 Location으로 설정하고Details > Brush Settings을 통해 NPC의 움직임 영역을 설정할 수 있다Viewport 클릭하고 P키를 누르면, 에디터에서 네비 메시 영역이 녹색으로 표시된다해당 NavMesh를 사용하려면 아래의 모듈을..

게임 엔진/[코드조선] 언리얼

언리얼 Damage Framework - TakeDamage 함수

TakeDamage() 함수 감지된 액터에 데미지를 전달하기 위한 데미지 프레임워크가 제공된다그중 대표적인 것이 AActor::TakeDamage() 함수이다TakeDamage() 함수는 총 네 개의 인자를 가진다 - DamageAmount 전달할 데미지의 양- DamageEvent 데미지의 종류- EventInstigator 공격 명령을 내린 컨트롤러- DamageCauser 데미지 전달을 위해 사용한 액터bCanBeDamaged 속성 모든 액터에는 CanBeDamaged 속성이 있다이를 false로 설정하면 캐릭터에 전달된 데미지의 결과가 모두 0이 되는 무적 상태가 된다 TakeDamage() 함수 코드 예시 // SPlayerCharacter.h...class STUDYPROJECT_API ASP..

게임 엔진/[코드조선] 언리얼

언리얼 Collision - Draw Debug (+ Console Command)

Console Command런타임 중에 디버깅용 PrintString() 함수 호출이나 디버깅용 드로잉을 자유자재로 끄고 키고자 하는 경우에 콘솔 커맨드를 활용하면 된다언리얼 에디터 > 틸드키(`)를 통해 콘솔 커맨드 입력이 가능하다  Console Command 생성우리만의 콘솔 커맨드를 만들기 위해서는아래의 코드와 같이 작성하면 되고콘솔 커맨드에 "StudyProject.ShowAttackDebug 1"을 작성해서 콘솔 변수에 1을 넣어 활용할 수 있다// SPlayerCharacter.h...class STUDYPROJECT_API ASPlayerCharacter : public ASCharacter{ ...public: static int32 ShowAttackDebug; protected: ....

게임 엔진/[코드조선] 언리얼

언리얼 Collision - 충돌 감지

콜리전 트레이싱 함수 콜리전 트레이싱을 하기 위해서는세 가지 카테고리를 함수 이름에 작성해주어야 한다ex. {처리방법}{대상}{처리설정}  처리방법 LineTrace-/BoxTrace-/SphereTrace-/CapsuleTrace-/… Sweep- Overlap-대상 Test: 무언가 감지 되었는지를 테스트 Single 또는 AnyTest: 감지된 단일 물체 정보를 반환Multi: 감지된 모든 물체 정보를 배열로 반환 처리설정 ByChannel: 채널 정보를 사용해서 감지ByObjectType: 물체에 지정된 오브젝트 타입(콜리전 채널) 정보를 사용해 감지ByProfile: 프로파일(콜리전 프리셋) 정보를 사용해서 감지캐릭터 공격의 충돌 감지 예시캐릭터의 위치에서 시선 방향으로 물체가 있는지 감지하는 ..