[Unreal]#17_Behavior Tree Unreal 개발 중 "AI Controller"에 대해 알아보겠습니다. "Simple Shooter Game"의 AI Player 개발 내용입니다. Sequence 1. 화면 2. 기능 컴포짓 노드(합성 노드)입니다. 왼쪽에서 오른쪽으로 하위 노드들을 실행하고, 어느 하나가 실패할 때까지 실행합니다! 하위 노드들 중 어느 하나가 실패하면, 이후에 다른 하위 노드들의 실행도 중지됩니다. 모든 하위 노드들의 성공이 시퀀스의 성공입니다. "가혹한" 노드라고 표현하겠습니다. Selector 1. 화면 2. 기능 Selector 또한 컴포짓 노드입니다. Sequence와 동일하게 왼쪽에서 오른쪽으로 하위 노드들을 실행합니다. 하위 노드들 중 어느 하나가 성공할 때까..
[Unreal]#16_Behavior Tree Setting Unreal 개발 중 "AI Controller"에 대해 알아보겠습니다. "Simple Shooter Game"의 AI Player 개발 내용입니다. Setting 1. Behavior Tree + Bloackboard 블루프린트 생성 2. ShooterAIController.h // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "AIController.h" #include "ShooterAIController.generated.h" /** * */ UCLASS() cla..
[Unreal]#15_Line Of Sight, Acceptance Radius of AI Unreal 개발 중 "AI Controller"에 대해 알아보겠습니다. "Simple Shooter Game"의 AI Player 개발 내용입니다. Acceptance Radius 1. ShooterAIController.h // ShooterAIController.h... #pragma once #include "CoreMinimal.h" #include "AIController.h" #include "ShooterAIController.generated.h" /** * */ UCLASS() class SIMPLESHOOTERNEW_API AShooterAIController : public AAIControl..
[디자인 패턴] #13_이벤트 큐, Event Queue 게임 디자인 패턴 중 "디커플링 패턴"에 대해 알아보겠습니다. "게임 프로그래밍 패턴"의 15 항목, "이벤트 큐"에 해당하는 내용입니다. 의도 이벤트를 보내는 시점과 처리하는 시점의 디커플링 동기 1. 예제 코드 class Audio { public: static void playSound(SoundID soundId, int volume); }; void Audio::playSound(SoundID soundId, int volume) { ResourceId resource = loadSound(soundId); //특정 Sound를 Play하기 위한 처리 코드... } 사운드 재생을 처리하기 위한 "Audio" 클래스를 가정합니다. 2. 문제..
[Unreal_블루프린트]#29_Multiple Damage Problem Unreal 블루프린트 개발 중 "Damage 문제" 구현의 수정을 진행합니다. "블루 프린트" 활용에 대한 내용입니다. BP_Combo 1. Send Damage 함수 수정 새롭게 피격당한 Actor를 "Hitted Character" 배열에 삽입합니다. 이미 피격당한 Actor가 존재하는지 Hitted Character 배열을 순회하며 체크합니다 삽입이 모두 완료되면, BP_Weapon::Send Damage()을 호출합니다. 2. OffCollision 커스텀 이벤트 수정 OffCollision 호출은 Weapon의 공격이 모두 끝난 시점에 호출되는 BP_Combo에서 제공하는 이벤트입니다. OffCollision 호출과 함..
[Unreal_블루프린트]#28_Change Targeting Unreal 블루프린트 개발 중 "타게팅" 구현에 대해 알아보겠습니다. "블루 프린트" 활용에 대한 내용입니다. Camera Focal Point 1. End Lock On 커스텀 이벤트 생성 2. Tick Lock On, Targeting 액션의 실시간 업데이트 1. Lock Distance 변수 Targeting 입력 액션이 발생할 때마다, 주어진 "최대 범위"를 의미합니다. 2. Set Control Rotation Targeting이 성공적으로 이루어졌을 때, Controller, 즉 Camera의 회전을 Enemy 방향으로 설정합니다. 3. Tick 이벤트 당연하게도, Tick Lock On 이벤트를 호출하기 위해선 Tick 이벤트에..
1. 개념 1. 스마트 포인터C++에서 제공하는 스마트 포인터는 자동 메모리 관리를 제공하는 포인터 클래스입니다. 스마트 포인터는 일반 포인터와 같이 참조/역참조 연산이 가능하며, 가리키는 객체의 수명이 끝나면 자동적으로 메모리 해제를 수행하여 메모리 릭을 방지합니다. 따라서, 사용자는 스마트 포인터 사용을 통해 동적 할당 받은 메모리 영역에 대한 명시적인 해제 작업에 대한 부담 없이 안전하고, 효율적인 코드 작성이 가능합니다. 2. auto_ptr 1. 사용 금지!!!!C++ 11 표준 이전에 제공되던 "auto_ptr"은 심각한 단점을 안고 있습니다. "auto_ptr"은 vector와 같은 STL 컨테이너에서는 정상적을 작동되지 않습니다! 따라서, "auto_ptr"는 사용하지 맙시다! 3. u..
[Basic C++] #59_가비지 컬렉션C++의 "가비지 컬렉션"에 대해 알아보겠습니다."전문가를 위한 C"의 22 항목, "효과적인 메모리 관리"에 해당하는 내용입니다. 개념가비지 컬렉션은 자동 메모리 관리 기법 중 하나로, 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 식별하고 해제하는 프로세스입니다. 가비지 컬렉션은 자동 메모리 관리를 통해 댕글링 포인터 발생을 방지하고, 편의성을 제공하지만, 런 타임 오버헤드를 유발합니다. 마크 앤 스윕 알고리즘마크 앤 스윕 알고리즘은 가비지 컬렉션의 접근 방법 중 하나로 주기적으로 모든 포인터에 대해 해당 메모리를 참조하여 사용하는 부분이 있는지 검사하여 표시(마크)합니다. 각 검사 주기가 끝날 때마다 표시되지 않은 메모리를 "미사용"으로 취급하여 ..
[Unreal]#15_FText, FString, FName Unreal 개발 중 "FText, FString, FName"에 대해 알아보겠습니다. FName 재사용 시에도 데이터 테이블에 한 번만 저장되어 초경량 시스템을 제공합니다. 대 소문자 구분이 없고, 변경 혹은 조작이 불가능한 특징을 갖고 있습니다. *정적인 속성, *빠른 접근 속도 FText 문자 현지화(Text Localization)를 위한 기초적인 컴포넌트. *Text Localization FString 앞선 두 개와 달리, 조작 및 변경이 가능한 클래스. 제공하는 메서드 또한 다양하며 알고리즘도 다양합니다. *조작 및 변경 가능, *높은 메모리 사용량 변환
[Unreal_블루프린트]#27_Targeting Unreal 블루프린트 개발 중 "타게팅" 구현에 대해 알아보겠습니다. "블루 프린트" 활용에 대한 내용입니다. Targeting 1. Get Trace Target 함수 1. Multi Sphere Trace By Objects 최대 Radius 값(Lock On Distance 사용자 정의 변수)을 갖고 Sphere를 생성하여, Sphere와 충돌하는? 범위에 있는 특정 유형의 값을 모두 반환합니다. 2. Add Unique 지정 배열에 항목을 추가하지만, 중복 항목은 추가하지 않도록 합니다. * for each 노드 생성 시 구조체 핀 분할을 통해 항목의 모든 값을 보이도록 합니다. 2. Get Target Enemy 함수 1. Get Dot Pro..