언리얼 Assert
·
[게임 개발] 언리얼엔진 공부/개인 메모
Assert 표준 C++에서 제공조건이 False 일 때 프로그램을 중단.디버깅 중 주로 사용되며 Release 빌드 시 제외 Check언리얼엔진에서 제공Assert와 유사한 기능을 하지만 언리얼엔진에서 제공한다는 차이가 있음USE_CHECKS_IN_SHIPPING 기능을 이용해 릴리즈 빌드에서도 적용 가능"이 변수는 절대로 null이 아니어야 해! 만약 null이면 프로그램을 멈춰!"Verify언리얼엔진에서 제공Check와 유사한 기능을 하지만, 디버그 중에는 프로그램을 종료시키고 릴리즈 빌드의 경우 계속 진행함 "이 함수는 반드시 성공해야 해! 디버깅 중에는 실패하면 프로그램을 멈출 거야. 하지만 릴리즈 빌드에서는 실패해도 프로그램을 계속 실행할 거야."Ensure언리얼엔진에서 제공Verify와 비슷..
모듈 폴더를 인클루드 경로에 설정
·
[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.2
PublicIncludePaths.AddRange(new string[] { "모듈이름" });해당 코드를 모듈.Build.cs 파일에 넣어서 헤더 경로를 찾기 쉽게 할 수 있다.원래라면 헤더파일을 인클루드 하려고 할 때 전체 경로를 작성해야 하지만, 인클루드 경로를 설정 한다면컴파일러가 자동으로 모듈이름의 폴더를 찾아 헤더파일을 인클루드 할 수 있다.
Game Instance
·
[게임 개발] 언리얼엔진 공부/개인 메모
Game Instance 여러 레벨이나 게임모드에서 공유해야 하는 데이터를 관리하기 유용한 클래스 게임 인스턴스는 게임 시작 시 생성되어 게임이 종료될 때까지 유지된다. 중간에 잃어버리면 안되는 데이터를 저장하기에 좋은 공간
델리게이트
·
[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1
강한 결합과 느슨한 결합 강한 결합 - 클래스들이 서로 의존성을 가지는 경우를 의미한다. 느슨한 결합 - 실물에 의존하지 말고 추상적 설계에 의존하자(DIP 원칙) - 유지 보수를 손쉽게 만들어줌 느슨한 결합의 간편한 구현 함수를 오브젝트처럼 관리하면 어떨까? 함수포인터를 이용한 콜백함수 (C스타일) - 가능은 하나 복잡함 - c++에서 bind와 fuction 활용이 느려 게임에선 쓰기 힘듬 델리게이트 키워드 - 함수를 객체처럼 다룸 - 안정적이고 간편한 선언 발행/구독 디자인 패턴 Push 형태의 알림을 구현하는데 적합한 디자인 간단히 말해서 델리게이트가 자신에 대해서 발행을 시도하면 해당 델리게이트를 구독한 함수가 모두 호출되는 것 발행자(Publisher) 와 구독자(Subscriber) 로 구분..
언리얼 열거형, 컴포지션
·
[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1
섹션 2.언리얼 C++ 설계 II - 컴포지션中 열거형 열거형이란? 열거형은 정수형 상수 집합을 정의하기 위해 사용되는 데이터 형식. 프로그래밍에서 특정한 값의 집합을 나타내는 데 유용. 열거형은 주로 상수 값으로 사용되는 식별자들을 정의하고, 해당 값들을 사용할 때 편의성과 가독성을 높여줌. UENUM() enum class ECardType : uint8 { Student = 1 UMETA(DisplayName = "For Student"), Teacher UMETA(DisplayName = "For Teacher"), Staff UMETA(DisplayName = "For Staff"), Invalid }; 위 코드에서 ECardType은 열거형의 이름이며 Student, Teacher, Staff..
언리얼 인터페이스
·
[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1
섹션 2.언리얼 C++ 설계 I - 인터페이스中 언리얼 C++ 인터페이스 인터페이스 객체가 반드시 구현해야 할 행동을 지정하는데 활용되는 타입 다형성의 구현: 인터페이스는 클래스가 특정한 동작을 수행하는 방법을 정의. 이를 구현하는 클래스들은 같은 인터페이스를 따르지만 각자의 방식으로 동작할 수 있다. 다양한 클래스들이 동일한 인터페이스를 구현함으로써, 동일한 메서드를 호출할 수 있으면서도 각자의 특징과 동작을 가질 수 있음. 의존성이 분리된 설계: 인터페이스를 사용하면 클래스 간의 결합도를 낮추고 의존성을 분리할 수 있다. 인터페이스를 정의하여 클래스 간에 추상화 계층을 생성하면, 클래스들은 인터페이스에만 의존하게 된다. 이를 통해 클래스 간의 직접적인 의존성이 줄어들어 코드의 유연성과 재사용성을 향상..
언리얼 오브젝트 리플렉션
·
[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1
섹션 1.언리얼 오브젝트 리플렉션 시스템 II 中 C++ 오브젝트와 언리얼 오브젝트 언리얼 C++가 따로 있는 이유 언리얼 엔진은 성능을 위해 기존 C++를 포기할 수 없었기 때문에 기존 C++ 언어를 확장해 모던 객체 지향 설계를 가능하도록 만듬 구분을 위하여 일반 C++ 오브젝트는 접두사 F 언리얼 오브젝트는 접두사 U 를 사용 C++ 오브젝트: 저수준의 빠른 처리를 위한 기능 구현에 사용 언리얼 오브젝트: 콘텐츠 제작에 관련된 복잡한 설계 구현에 사용 언리얼 오브젝트 리플렉션 시스템 리플렉션 이란? 객체의 속성과 동작을 동적으로 검사하고 조작하는 능력 언리얼 엔진은 UObject 클래스를 기반으로 한 리플렉션 시스템을 제공 리플렉션의 몇가지 주요 개념 UPROPERTY 매크로 - 클래스의 멤버 변수..
TChar와 FString
·
[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1
섹션 1.언리얼C++ 기본타입과 문자열 中 문자열 언리얼은 UTF-16 (한 문자당 2바이트) 포맷을 사용하지만 소스코드에서 한글을 사용 하고자 한다면 UTF-8 (1바이트에서 최대 4바이트 가변길이) 포맷을 사용. TChar 와 FString TChar 배열을 FString에 넣으면 TArray 방식으로 문자열이 보관 동적 배열에서 데이터를 꺼내 쓸 때에는 동적배열의 내부 자료에 대한 포인터를 가져와서 넘겨줘야 한다(dereferencing) TCHAR CharArray[] = TEXT("Hello Unreal"); FString CharString = CharArray; UE_LOG(LogTemp, Log, TEXT("%s"), *CharString); 또한, Find 와 Split 과 같이 문자열을..
언리얼의 기본 타입을 따로 지정하는 이유
·
[게임 개발] 언리얼엔진 공부/이득우의 언리얼 프로그래밍 Part.1
섹션 1.언리얼C++ 기본타입과 문자열 中 언리얼의 기본 타입을 따로 지정하는 이유 게임 개발의 경우 컴퓨터의 최대 퍼포먼스를 뽑아내야 한다. 데이터 정보가 명확해야 한다. int의 경우 C++ 최신 규약에서 int는 최소 32bit를 보장하도록 되어있다. 이는 특정 플랫폼에서 64bit로 해석 될 수 있기 때문에 데이터를 저장할 때 int 타입의 크기를 확신할 수 없다. 따라서 언리얼 엔진에서는 int 대신 int32 혹은 uint32 와 같이 데이터 크기를 명시한다. 실수형의 경우 다만 float와 double 같은 부동소수점 데이터 타입의 자료형은 국제 표준에 따라 정의된 특정 크기를 가지고 있기 때문에 명시하지 않는다. bool 타입의 선언 또한 bool 타입은 크기가 명확하지 않기 때문에 uin..