게임 개발
-
언리얼 컨테이너 라이브러리 I - Set게임 개발/Unreal 2024. 2. 1. 00:43
TSet의 특징 STL의 set과 언리얼 TSet의 비교 STL set의 특징 STL set은 이진 트리로 구성되어 있어 정렬을 지원함 STL set은 메모리 구성이 효울적이지 않음 STL set은 요소가 삭제될 때 균형을 위한 재구축이 일어날 수 있음 STL set의 모든 자료를 순회하는데 적합하지 않음 언리얼 TSet의 특징 TSet은 해시테이블 형태로 키 데이터가 구축되어 있어 빠른 검색이 가능함. TSet은 동적 배열의 형태로 데이터가 모여있음 TSet의 데이터는 빠르게 순회할 수 있음 TSet의 데이터는 삭제해도 재구축이 일어나지 않음 TSet의 자료에는 비어있는 데이터가 있을 수 있음 따라서 STL set과 언리얼 TSet의 활용 방법은 서로 다르기 때문에 주의할 것 STL의 unordered..
-
언리얼 컨테이너 라이브러리 I - Array게임 개발/Unreal 2024. 1. 31. 22:09
언리얼 컨테이너 라이브러리 언리얼 엔진이 자체 제작해 제공하는 자료구조 라이브러리 줄여서 UCL(Unreal Container Library)라고도 함. 언리얼 오브젝트를 안정적으로 지원하며 다수 오브젝트 처리에 유용하게 사용됨. 언리얼 C++은 다양한 자료구조 라이브러리를 직접 만들어 제공하고 있음. 실제 게임 제작에 유용하게 사용되는 라이브러리로 세 가지를 추천함. C++ STL과 언리얼 컨테이너 라이브러리의 차이점 C++ STL은 범용적으로 설계되어 있다. C++ STL은 표준이기 때문에 호환성이 높다. C++ STL에는 많은 기능이 엮여 있어 컴파일 시간이 오래걸림 언리얼 컨테이너 라이브러리는 언리얼 엔진에 특화되어 있음 언리얼 컨테이너 라이브러리는 언리얼 오브젝트 구조를 안정적으로 지원한다. 언..
-
언리얼 C++ 설계 III - 델리게이트게임 개발/Unreal 2024. 1. 30. 23:50
강한 결합과 느슨한 결합 강한 결합(Tight Coupling) 클래스들이 서로 의존성을 가지는 경우를 의미한다. class Staff { public : Staff(int InPower ) : Power(InPower){} int Power = 0; }; class Magician { public: Magician(Staff InStaff) : MyStaff(InStaff) {} protected: Staff MyStaff; }; 예시에서 Staff가 없는 경우 Magician이 만들어 질 수 없다. 이 때 Magician은 Staff에 대한 의존성을 가진다고 한다. Staff말고 다른 무기를 가진다면? class ICheck { public: virtual bool check() = 0; }; cla..
-
컴포지션(Composition)게임 개발/Unreal 2024. 1. 30. 00:42
객체 지향 설계에서 상속이 가진 Is-A 관계만 의존해서는 설계와 유지보수가 어려움. 예를 들어, '새' 클래스가 '동물' 클래스로부터 상속받고, 여러 새의 종류가 '새' 클래스로부터 상속받는 구조를 생각해 볼 수 있는데, 이렇게 계속 확장될수록 다음과 같은 문제가 발생할 수 있다. 1. 강한 결합(Tight Coupling): 상위 클래스에서의 작은 변경 사항이 모든 하위 클래스에 영향을 미칠 수 있다. 2. 낮은 재사용성: 특정 하위 클래스에서만 필요한 기능이 상위 클래스에 추가되면, 그 기능은 모든 하위 클래스에 불필요하게 상속된다. 3. 난해한 코드: 계층이 깊어질수록 클래스 간의 관계를 이해하기 어려워 진다. 특히 다중 상속을 사용하는 경우, 어떤 기능이 어느 클래스에서 왔는지 추적하기 어려워질..
-
언리얼 C++ 설계 I - 인터페이스게임 개발/Unreal 2024. 1. 29. 21:27
인터페이스랑? 객체가 반드시 구현해야 할 행동을 지정하는데 활용되는 타입 다형성의 구현, 의존성이 분리된 설계에 유용하게 활용 언리얼 엔진에서 게임 콘텐츠를 구성하는 오브젝트의 설계 예시 월드에 배치되는 모든 오브젝트[안 움직이는 오브젝트를 포함(Actor)] 움직이는 오브젝트 (Pawn) 길찾기 시스템을 반드시 사용하면서 움직이는 오브젝트(INavAgnetInterface 인터페이스를 구현한 Pawn) 언리얼C++ 인터페이스 특징 인터페이스를 생성하면 두 개의 클래스가 생성된다. U로 시작하는 타입 클래스 I로 시작하는 인터페이스 클래스 객체를 설계할 때 I 인터페이스 클래스를 사용 U타입 클래스 정보는 런타임에서 인터페이스 구현 여부를 파악하는 용도로 사용됨 실제로 U타입 클래스에서 작업할 일은 없음..
-
언리얼 오브젝트 리플렉션 시스템 I게임 개발/Unreal 2024. 1. 27. 14:05
리플렉션 시스템 프로그램 실행 시간에 객체의 정보를 조사할 수 있는 기능. 언리얼 엔진의 기능과 에디터 기능 구축의 근간 C++ 자체는 리플렉션을 지원하지 않아 언리얼 엔진이 이를 구현한다. 언리얼 엔진에서는 일반 c++객체와 언리얼 오브젝트 객체 두가지로 나눌 수 있으며, 리플렉션 시스템을 옵션으로 필요에 따라 선택적으로 사용할 수 있다. 언리얼 엔진의 UHT는 프로젝트를 컴파일하기 전에 관련된 헤더 파일과 cpp 파일을 분석한다. 이 과정에서 생성된 정보는 generated.h 라는 특수한 파일에 저장된다. 이 파일에는 리플렉션 시스템에 대한 정보도 포함되어 있습니다. 언리얼 엔진에서 기본 오브젝트를 생성할 때, generated.h 는 자동으로 포함된다. 이 특수 헤더 파일은 언리얼 엔진 헤더 툴이..
-
언리얼 C++ 기본타입과 문자열게임 개발/Unreal 2024. 1. 25. 00:12
유니코드 문자와 대응되는 숫자를 포함하는 표 인코딩 데이터를 특정 형식으로 변환하는 과정(UTF-8) TEXT("Hello World"); TEXT 매크로는 언리얼 엔진에서 문자열 리터럴을 프로젝트의 유니코드 설정에 맞게 올바른 타입으로 자동으 변환한다. TCHAR 유니코드를 위한 언리얼 표준 캐릭터 타입 1. 플랫폼 독립성: TCHAR는 Unreal Engine 프로젝트 설정에 따라 char 또는 wchar_t로 자동 정의된다. 이는 프로젝트가 유니코드를 사용할지, ANSI 문자 인코딩을 사용할지에 따라 달라진다. 이러한 유연성은 개발자가 하나의 코드 베이스로 다양한 플랫폼에서 동작하는 게임을 개발할 수 있도록 지원한다. 2. 국제화 및 로컬라이제이션 지원: 유니코드를 지원함으로써 Unreal Engi..
-
유니티 충돌게임 개발/Unity 2022. 8. 5. 01:27
Collision 물리적으로 부딪친 오브젝트에 대한 정보가 담겨있다. OnCollisionEnter 이벤트 함수가 발생하면 매개 변수인 Collision 타입의 collision에 나랑 부딪힌 오브젝트의 여러 정보가 담기게된다. OnCollisionEnter 이벤트가 발생하기 위한 조건 나 혹은 상대방 둘중 하나는 Rigidbody 컴포넌트가 있어야 한다. (Is Kinematic은 꺼져있어야함) 나 그리고 상대방 둘다 Collider가 붙어있어야 한다.(IsTrigger은 꺼져있어야함) Trigger 물리적으로 부딪히지 안더라도 내 Collider 범위 안에 들어온 오브젝트의 정보를 알려준다. 물리연산이 필요없을시 사용하면 성능을 높일수있다. OnTriggerEnter 이벤트가 발생하기 위한 조건 나 ..