분류 전체보기 42

UnrealEngine 5 Subsystem

Unreal Engine에서 Subsystem은 엔진의 기능을 확장하고 유연성을 제공하는 중요한 요소입니다. 이번 글에서는 Subsystem의 개념과 사용 방법에 대해 알아보겠습니다. Subsystem이란? Subsystem은 Unreal Engine에서 엔진의 기능을 모듈화하고 확장하기 위한 개념입니다. 각 Subsystem은 특정 기능을 담당하며, 이를 통해 사용자가 엔진 클래스를 수정하거나 오버라이드하지 않고도 기능을 확장할 수 있습니다. 사전적 의미 시스템을 구성하는 요소의 하나로, 그 자체로도 시스템을 형상하고 있는 것 시스템이 커지면 내부를 다시 작은 시스템으로 나누어 생각하도록 하여, 설계나 관리에도 용이할 수 있도록 하는 개념 Subsystem의 구조 Subsystem은 C++ 클래스로 구..

UnrealEngine 2023.08.12

컴파일러의 이해 개요

이 글은 한빛미디어에서 발행된 '컴파일러의 이해' 책을 읽으면서 정리한 내용입니다. 책 링크 Chapter 1. 개요 컴파일러의 필요성 인간이 사용하는 고급 언어를 컴퓨터가 이해할 수 있도록 기계어로 번역해주는 역할. 번역기는 하나의 프로그래밍 언어로 작성된 프로그램을 그와 동등한 의미를 가진 다른 프로그래밍 언어로 된 프로그램으로변환하는프로그램입니다. 소스 프로그램 : 입력되는 프로그램 목적 프로그램 : 출력되는 프로그램 번역기의 종류 어셈블러 어셈블리어로 작성된 소스 프로그램을 그에 대응하는 기계어로 번역된 목적 프로그램으로 변환해주는 번역기 어셈블리어는 기계어를 사람이 좀 더 이해하기 쉽도록 기호화 한 것. 2 Pass Assembler 1Pass : 메모리를 표시하는 모든 식별자를 찾아내고 그 식..

GameplayTag

FGameplayTag GameplayTagManager에 등록되어 있는 계층 구조를 가지는 이름 오브젝트의 상태를 분류하고 설명하는데 유용하게 사용되는 구조체 오브젝트가 어떤 태그를 들고 있는지, 없는지에 따라 현재 상태를 나타낼 수 있음. (ex. stun) 기존에는 캐릭터의 상태를 bool이나 enum으로 처리하던 것을 GameplayTags로 대체할 수 있고, 이로 인해 객체에 특정 GameplayTags가 있는지 여부를 확인하며 논리 구조를 세울 수 있습니다. 오브젝트에 태그를 부여할 때는 GAS와 상호작용을 할 수 있도록 AbilitySystemComponent에 부여하는 것이 일반적입니다. UAbilitySystemComponent는 IGameplayTagAssetInterface를 구현하여..

UnrealEngine 2023.02.06

GameAbilitySystem 기본

GameAbilitySystem 이란? 에픽 게임즈에서 사용하는 게임 개발 프레임워크 Ability(능력)와 Attribute(속성)를 통해 구축할 수 있는 높은 유연성을 가진 프레임워크 게임 내에서 액션과 패시브 능력을 캐릭터를 통해 사용할 수 있습니다. 이러한 능력들을 사용할 때 cooldown이라는 타이머 또는 재료 소모를 구현할 수 있습니다. 여기서 재료란 대체로 Mana, Stamina와 같은 것들을 의미합니다. Ability는 Level의 개념이 존재하여 각 레벨 별로 효과를 달리할 수도 있습니다. 왜 GAS를 사용해야 하는가? 쉽게 확장할 수 있으며, 리플리케이션이 지원 됩니다. 다양한 스킬과 클래스를 가지는 멀티 플레이 RPG에서 유요합니다. 많은 것들이 이미 구현되어 있기 때문에 게임 개..

UnrealEngine 2023.01.01

LeetCode PalindromeLinkedList 문제

LeetCode Top Interview Questions의 LinkedList 탭에 있는 PalindromeLinkedList를 풀어보았습니다. 주어진 문제에서 제한된 내용은 노드는 1부터 10^5까지의 개수를 가질 수 있습니다. 노드의 value는 0 val) return false; head = head->next; } return true; }; return ip_rec(head); } LeetCode에서 발견한 풀이법 포인터를 두개 사용하여, 포인터를 이동시키며 해당 값이 팰린드롬 인지 확인하는 방법입니다. 재귀호출을 이용하여 노드를 뒤집는 방법까지 사용했습니다. ListNode* reverse(ListNode* head) { if (head == nullptr || head->next == n..

Algorithm 2022.12.18

Actor 개념 정리

액터 : 월드를 꾸며주는 모든 컴포넌트 또는 리플리케이션의 단위 그러므로 액터의 직렬화를 통해서 네트워크 데이터 동기화도 가능 언리얼 엔진은 모든 단위를 액터로 통제한다. 리플리케이션(Replication) : 네트워크 게임에서 서로 동기화하는 작업 월드(레벨) : 게임에서의 맵을 표현하는 언리얼엔진의 단위 스폰 : 월드에 액터를 실시간으로 추가하는 행위 / 월드 상에 액터 클래스를 전달받아서 액터 클래스에 맞는 새로운 오브젝트를 만드는 행위 액터 내부에느 액터의 이동 방법, 렌더링 방법 등을 제어하는 데 사용할 수 있는 ActorComponents Collections가 포함되어 있음. 언리얼에서 컴포넌트의 개념 액터는 기능별로 존재하진 않음. ex. 포인트라이트 액터에는 포인트라이트 컴포넌트만 들어가..

UnrealEngine 2022.12.18

LeetCode LinkedList Cycle

date: 2021-05-09 LeetCode LinkedList Cycle LeetCode Top Interview Questions의 LinkedList 탭에 있는 LinkedList Cycle 풀어보았습니다. 주어진 문제에서 제한된 내용은 - LinkedList의 Head가 주어졌을 때 해당 LinkedList가 Cycle을 가지는지 확인해주세요. - 노드 개수는 [0, 10^4] 사이의 값을 가집니다. - 노드의 값은 -10^5부터 10^5 사이의 값을 가집니다. 주어진 문제를 풀 때 중점적으로 봐야할 점. - 공간복잡도 O(1)으로 풀 수 있는지 확인해봅니다. 문제에서 주어진 ListNode /** * Definition for singly-linked list. * struct ListNode..

Algorithm 2022.11.06

Unity3d Canvas Object에 대해서

GameObject CanvasUnity에서 모든 UI Element(텍스트, 이미지, 버튼, 슬라이더 등)는 반드시 이 Canvas 객체 하위에 위치해야만 한다.Rect Transform, Canvas, Canvas Scaler, Graphic Raycaster. 총 4개의 컴포넌트로 구성된 GameObject.한 Scene에서 여러개 생성하거나 다른 Canvas 객체의 하위로 차일드화 할 수 있다.Hierarchy View에 Canvas를 생성할 경우, Event System도 자동으로 생성된다. EventSystem시스템에서 발생하는 키보드, 조이스틱, 스크린터치 등의 입력 정보를 Canvas 하위에 있는 UI 항목에 전달하는 역할.Standalone Input Module 컴포넌트를 포함하고 있다..

Unity C# 2018.08.04

C# Delegate에 대한 정리

Delegate메소드에 대한 참조를 나타내는 방메소드 대신해서 호출하는 역할메소드의 대리인 역할을 해주는 변수메소드를 직접적으로 호출하는 방식이 아닌, 델리게이트를 호출함으로써 해당 메소드를 호출(실행)할 수 있는 방식. 델리게이트를 '인스턴스화' 하면 호환되는 파라미터 타입/개수와 리턴 타입이 같은 모든 메소드를 참조할 수 있게 된다.C++의 함수 포인터와 동일한 형태로 사용가능하지만, 안전하게 캡슐화하여 사용할 수 있다는 장점이 있다.콜백(CallBack) 메소드를 구현할 때 효율적이다.CallBack Method란? A 메소드를 호출할 때 B 메소드를 넘겨줘서 A 메소드로 하여금 B 메소드를 호출하도록 하는 것. 이 때 A 메소드를 콜백 메소드라고 한다.Delegate Chain : 하나의 델리게이..

Unity C# 2018.07.30

Collections, Boxing, UnBoxing 정리

C# 언어 내부에서 제공하는 Collection(Stack, Queue, ArrayList, HashTable)에 데이터의 입, 출력이 있으면 그때마다 박싱과 언박싱이 계속해서 발생하게 되고, 데이터가 많아질수록 컴퓨터 성능에 상당한 부하가 발생하게 된다.부하가 발생하는 원인 : 컬렉션은 데이터의 어떤 타입도 전부 object 타입으로 저장하기 때문에, 데이터에 접근할 때마다 본래 타입으로의 형식변환이 일어나기 때문이다. => Boxing과 UnBoxing.성능 상의 이슈가 문제가 된다면, 컬렉션보단 일반화 컬렉션(Generic Collection)을 사용하기로 한다. 일반화 컬렉션 종류 : List, Queue, Stack, DictionaryArrayList, Queue, Stack, HashTabl..

Unity C# 2018.07.28