목록전체 글 (225)
그냥 게임개발자
푸시 형태의 알림을 구현하는 데에는 발행-구독 디자인 패턴이 적합합니다. 이 패턴은 시스템을 발행자와 구독자로 분리합니다. 콘텐츠 제작자는 콘텐츠를 만들고, 발행자는 이 콘텐츠를 구독자에게 배포하는 역할을 합니다. 구독자는 배포된 콘텐츠를 받아서 사용하게 됩니다. 이렇게 하면 콘텐츠 제작자와 구독자가 서로를 알 필요 없이, 발행자를 통해서 콘텐츠를 생산하고 전달하는 느슨한 결합 구조를 구현할 수 있습니다. 이 패턴의 장점은 느슨한 결합으로 인해 유지보수가 쉽고, 시스템의 유연성이 높아집니다. 또한 테스트가 쉬워지고, 시스템의 규모를 유연하게 조절할 수 있으며, 기능 확장이 용이하다는 점입니다. 이러한 이유로 발행-구독 디자인 패턴은 푸시 형태의 알림 구현에 매우 적합합니다.
함수를 다루는 방법에는 여러 가지가 있습니다. 가장 기본적인 방법은 함수 포인터를 활용한 콜백(callback) 함수 구현입니다. 이 방법은 가능하긴 하지만, 함수를 정의하고 사용하는 과정이 복잡하고, 안전성을 개발자가 직접 검증해야 합니다. C++ 17 구약의 std::bind와 std::function을 활용하는 방법이 있습니다. 이 방법은 사용이 간편하지만, 실행 속도가 비교적 느린 단점이 있습니다. C#에서는 델리게이트(delegate)라는 키워드를 제공합니다. 이를 활용하면 마치 객체처럼 함수를 다룰 수 있어 편리합니다. 델리게이트는 안정적이고 간편한 선언을 가능하게 해줍니다. 언리얼 C++에서도 델리게이트를 지원합니다. 이를 통해 느슨한 결합 구조를 간편하고 안정적으로 구현할 수 있습니다. 이..
Enum 클래스 새성 UENUM() enum class ECharacterType : uint8 { Player = 1 UMETA(DisplayName = "Player"), Monster UMETA(DisplayName = "Monster"), Npc UMETA(DisplayName = "Npc"), }; Enum의 바이너리 값을 메타데이터 DisplayName의 값을 가져오는 방법 // 여기서 Enum의 메타데이터의 정보를 가져와서 // 1번, 2번, 3번이 아닌 메타의 DisplayName이라는 문자열을 출력해보자. // 이것은 좀 복잡하지만 해보자. // FindObject라는 API를 사용해서 UEnum을 가져온다. // 언리얼에서 C++클래스는 Script라는 절대경로를 가짐 // /Scrip..
기존에 사용하던 UPROPERTY()로 선언된 원시 포인터 UPROPERTY() class UCard* Card; 현재 언리얼 5로 바뀌고나서 선택사항이 된 TObjectPtr 포인터 UPROPERTY() TObjectPtr Card; 이것은 선택사항이긴 하지만 선언 부분에서는 TObjectPtr로 다 변경해야 하며, 구현부에서는 그냥 포인터를 사용해도 무방하다.
객체 지향 설계에서 상속이 가진 Is-A 관계만 의존해서는 설계와 유지보수가 어려움 컴포지션은 객체 지향 설계에서 Has-A 관계를 구현하는 설계 방법 컴포지션의 활용 복합적인 기능을 거대한 클래스를 효과적으로 설계하는데 유용하게 사용할 수 있음. class Card { public: Card(int InId) : Id(InId) {} int Id = 0; }; class Person { public: Person(Card InCard) : IdCard(InCard) {} protected: Card IdCard; }; 상속 성질이 같은 부모 클래스와 자식 클래스의 관계를 의미 Is - A 컴포지션 성질이 다른 두 객체에서 어떤 객체가 다른 객체를 소유하는 관계를 의미 Has - A 언리얼 엔진에서의 컴..
인터페이스란? 객체가 반드시 구현해야 할 행동을 지정하는데 활용되는 타입 다형성(Polymorphism)의 구현, 의존성이 분리(Decouple)된 설계에 유용하게 활용
클래스를 가져오는 방법 // 런타임중에 얻어옴 Student->GetClass(); // 컴파일에서 얻어옴 Teacher::StaticClass();
https://docs.unrealengine.com/5.3/ko/asserts-in-unreal-engine/ check(표현식); 이 매크로는 표현식을 실행한 뒤, 어서트 결과가 false이면 실행을 중지 시킴 ensure(표현식); 표현식을 검증하여 실패하면 그 지점까지 이르는 콜스택을 생성해 Log에 나타나게 함. ensure은 한번만 실행됨(프로젝트를 다시 실행하면 되지만, 게임을 계속 처음부터 실행하면 한번만 오류를 발생하고 그 이후에는 발생하지 않음) 여러번 발동시키고 싶다면 ensureAlways를 사용 ensureMsgf(표현식, 메시지); 표현식을 검증, 리포트에 메시지를 추가시킨 콜스택을 생성