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

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

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

언리얼 오브젝트 기능 - Serialization

Object Graph 하나의 개체는 다른 개체를 속성으로 들고 있을 수 있고이러한 관계를 오브젝트 그래프라고 표현한다직렬화 오브젝트 그래프를 바이트 스트림으로 변환하는 과정이다복잡한 데이터를 일렬로 세우기 때문에 직렬화라고 부른다Serialization: 오브젝트 그래프에서 바이트 스트림으로의 변환Deserialization: 바이트 스트림에서 오브젝트 그래프로의 변환직렬화의 활용 현재 게임의 상태를 저장하고 다시 복원할 때 주로 사용된다블루프린트 코드를 복사해서 다른 곳에서 붙여 넣기도 가능하고캐릭터의 위치를 네트워크상으로 다른 컴퓨터에서 재현할 때도 사용된다 언리얼 엔진의 직렬화 시스템 직렬화 시스템을 위해서는 언리얼에서 제공하는 클래스 FArchive와 다양한 아카이브 클래스가 제공되고메모리 아카..

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

언리얼 오브젝트 기능 - Smart Pointer

언리얼 스마트 포인터 라이브러리TUniquePtr:포인터의 소유권을 공유할 수 없다특정 오브젝트에게 명확하게 포인터 해지 권한을 주고 싶은 경우에 사용한다delete를 직접 작성해주지 않고 자동으로 소멸된다 TSharedPtr:포인터의 소유권을 공유한다할당된 오브젝트 포인터가 여러 로직에서 공유되어 사용될 때 사용한다다른 함수로부터 할당된 오브젝트를 Out으로 받는 경우에는nullptr일 수도 있기에 주의해야 한다 TSharedRef:TSharedPtr과 유사하지만 유효한 개체임을 항상 보장받는다 TWeakPtr:TSharedPtr은 순환 참조 문제가 있어서 이를 개선한 포인터이다상호 참조하는 경우에 한 클래스는 Strong한 TSharedPtr을 사용하고다른 클래스는 Weak한 TWeakPtr을 사용하..

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

언리얼 오브젝트 기능 - C++ 로우 포인터 문제 해결

C++ 로우 포인터 문제 해결언리얼 오브젝트 사용을 통한 C++ 로우 포인터 문제 해결한다- 메모리 누수 해결:가비지 컬렉션 시스템을 통해 자동으로 해결된다 - 댕글링 포인터 해결:언리얼의 IsValid() 함수를 이용하면 해결된다참고로 댕글링 포인터는 메모리가 해제되거나 다른 데이터로 덮어 쓰여유효하지 않은 주소를 가리키는 경우이고nullptr 예외처리만 하면 댕글링 포인터 문제가 발생할 수 있다 - 와일드 포인터 해결:멤버변수에 UPROPERTY() 매크로 작성 시 자동 nullptr 초기화를 한다UPROPERTY() 매크로를 작성하지 않은 속성은 초기화되지 않기에 주의해야 한다

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

언리얼 오브젝트 기능 - Garbage Collection

가비지 컬렉션 시스템 C++에서는 할당받은 메모리는 반드시 프로그래머가 직접 해제를 해줘야 한다이를 지키지 않으면 메모리 누수부터 여러 문제가 발생한다프로그램에서 더 이상 사용하지 않는 언리얼 오브젝트를 자동으로 감지하고특정 상황에 회수하는 시스템을 Garbage Collection System이라고 한다생성된 모든 언리얼 오브젝트 정보를 모아둔 저장소를 사용해서 추적한다Mark-Sweep 방식의 가비지 컬렉션 1. 저장소에서 최초 검색을 시작하는 루트 오브젝트에서 시작2. 루트 오브젝트가 참조하는 개체를 찾아 Mark3. Mark된 개체로부터 해당 개체가 참조하는 개체를 찾아서 다시 Mark (반복)4. 이제 저장소에서 Mark된 개체와 그렇지 않은 개체로 나뉨5. 가비지 컬렉터는 저장소에서 Mark되..

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

언리얼 오브젝트 기능 - Interface

Interface 개념자식 클래스가 반드시 구현해야 할 “행동” 혹은 "기능"을 지정하는데 활용되는 클래스이다예를 들어,비둘기와 까마귀 클래스를 만든다면 새는 “날아가기”라는 행동을 하기에 "날아가기"와 관련된 인터페이스를 만들어서 Fly() 함수를 만들고비둘기와 까마귀 클래스에 해당 인터페이스를 상속받아서 Fly() 함수를 정의하게 하는 것이다Interface 목적 다형성의 구현과 의존성이 분리된(Decouple) 설계에 유용하게 활용된다예를 들어,새의 주인 클래스가 있고 주인이 새를 날린다고 가정하자주인 클래스는 무슨 새인지, 새가 어떻게 날아가는지 전혀 알지 못해도그저 나는 동작을 실행시키기만 하면 된다따라서,인터페이스의 Fly() 함수를 통해서 새와 연결시키고이를 통해, 그 어떤 새의 종류 클래스..

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

언리얼 오브젝트 기능 - 리플렉션

Unreal Reflection System 리플렉션은 런타임 중에 자기 자신을 조사하는 기능을 의미하고C#에 있는 기능으로 C++에서는 지원하지 않지만언리얼 오브젝트(클래스)인 경우에만 리플렉션을 이용할 수 있으며일반 C++ 클래스는 불가능하다언리얼 리플렉션 시스템의 동작 언리얼에서는 클래스의 멤버 변수를 속성(Property)이라고 부른다클래스의 멤버 함수를 함수(Function)이라고 부른다따라서,언리얼 오브젝트 클래스의 속성에 UPROPERTY() 매크로 키워드를,함수에 UFUNCTION() 매크로 키워드를 붙인다매크로를 작성하고 해당 매크로에 인자를 전달함으로써 런타임 중의 언리얼 에디터에 해당 데이터를 전달할 수 있다모든 언리얼 오브젝트는 자기 자신 클래스가 가진 속성과 함수 정보를 컴파일 타..

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

언리얼 오브젝트 기능 - CDO

Class Default Object CDO는 언리얼 오브젝트가 가진 기본값을 보관하는 템플릿 개체이다언리얼 엔진이 초기화되면 엔진 구동에 필요한 모듈이 순차적으로 로딩된다해당 모듈에 작성된 클래스들도 함께 로드되면서 CDO가 클래스마다 생성된다 CDO는 생성자에 작성된 로직에 따라 초기화 후 생성된다이를 통해서 언리얼은 개체를 생성할 때마다 새로운 개체를 생성하지 않고, 기존에 생성된 CDO를 복제하는 방식으로 생성해서 메모리 효율을 높인다당연히 새로운 개체는 CDO의 기본값을 공유하기 때문이다그리고 정말 필요한 경우가 아니라면 CDO로 만 처리하는 경우도 있다GetDefault() 함수 엔진이 초기화되면 모든 CDO는 메모리에 올라간 상태이고 엔진이 종료될 때까지 존재하기 때문에,메모리에 올라간 C..

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

언리얼 기초 - 언리얼 디버깅

Output Log일반적으로 Output Log 창에 로그를 보고 경고나 에러를 확인한다Toolbar > Window > Output Log를 클릭하면 위와 같은 창이 켜진다   UE_LOGUE_LOG 함수를 통해 출력될 텍스트를 작성할 수 있다UE_LOG의 인자로는 (로그 카테고리, 로그 수준, 형식 문자열, 인자)로 구분된다- 로그카테고리: 로그의 분류를 위해 카테고리를 지정할 수 있고 Output Log 창에서 필터링이 가능하며,Filters > Categories > Show all의 체크 해제 후 LogTemp만 체크하는 방식으로 이용 가능하다- 로그 수준:Output Log 창에서 로그 수준에 따라 색상이 달라진다Log는 흰색, Warning은 노란색, Error는 빨간색이다- 형식문자열: 출..

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

언리얼 기초 - 언리얼 코딩 컨벤션

언리얼은 기본적으로 파스칼 케이싱이다특히 변수 선언 시에 스네이크 케이싱을 사용하면 문제가 될 수 있다 파스칼 케이싱 vs. 스네이크 케이싱더보기파스칼 케이싱(Pascal Case)은 단어의 첫 글자를 대문자로 시작하여 연결된 각 단어의 첫 글자를 대문자로 쓰는 방식으로 식별자를 작성하는 규칙이다예를 들어, "MyVariableName"이나 "CalculateTotalScore"와 같은 형태이다스네이크 케이싱(Snake Case)은 단어를 소문자로 쓰고 각 단어를 밑줄(_)로 연결하여 식별자를 작성하는 규칙이다예를 들어, "my_variable_name"이나 "calculate_total_score"와 같은 형태이다클래스명 접두사 템플릿 클래스는 T- UObject 클래스를 상속받은 클래스는 U- AAc..

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

언리얼 기초 - 언리얼 오브젝트 클래스

언리얼 오브젝트 클래스를 아무것도 상속받지 않고 만들게 되면일반적으로 아래와 같은 구성을 나타낸다// SUnrealObjectClass.h#pragma once#include "CoreMinimal.h"#include "UObject/NoExportTypes.h"#include "SUnrealObjectClass.generated.h"/** * */UCLASS()class STUDYPROJECT_API USUnrealObjectClass : public UObject{ GENERATED_BODY()};// SUnrealObjectClass.cpp#include "SUnrealObjectClass.h" - #include “CoreMinimal.h” UE4 초반 버전에서는 #include “EngineM..