목록Unreal스터디 (36)
그냥 게임개발자

푸시 형태의 알림을 구현하는 데에는 발행-구독 디자인 패턴이 적합합니다. 이 패턴은 시스템을 발행자와 구독자로 분리합니다. 콘텐츠 제작자는 콘텐츠를 만들고, 발행자는 이 콘텐츠를 구독자에게 배포하는 역할을 합니다. 구독자는 배포된 콘텐츠를 받아서 사용하게 됩니다. 이렇게 하면 콘텐츠 제작자와 구독자가 서로를 알 필요 없이, 발행자를 통해서 콘텐츠를 생산하고 전달하는 느슨한 결합 구조를 구현할 수 있습니다. 이 패턴의 장점은 느슨한 결합으로 인해 유지보수가 쉽고, 시스템의 유연성이 높아집니다. 또한 테스트가 쉬워지고, 시스템의 규모를 유연하게 조절할 수 있으며, 기능 확장이 용이하다는 점입니다. 이러한 이유로 발행-구독 디자인 패턴은 푸시 형태의 알림 구현에 매우 적합합니다.
함수를 다루는 방법에는 여러 가지가 있습니다. 가장 기본적인 방법은 함수 포인터를 활용한 콜백(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..
객체 지향 설계에서 상속이 가진 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)된 설계에 유용하게 활용

https://docs.unrealengine.com/5.3/ko/asserts-in-unreal-engine/ check(표현식); 이 매크로는 표현식을 실행한 뒤, 어서트 결과가 false이면 실행을 중지 시킴 ensure(표현식); 표현식을 검증하여 실패하면 그 지점까지 이르는 콜스택을 생성해 Log에 나타나게 함. ensure은 한번만 실행됨(프로젝트를 다시 실행하면 되지만, 게임을 계속 처음부터 실행하면 한번만 오류를 발생하고 그 이후에는 발생하지 않음) 여러번 발동시키고 싶다면 ensureAlways를 사용 ensureMsgf(표현식, 메시지); 표현식을 검증, 리포트에 메시지를 추가시킨 콜스택을 생성
https://docs.unrealengine.com/5.3/ko/unreal-object-handling-in-unreal-engine/ 클래스, 프로퍼티, 함수에 적합한 매크로를 마킹해 주면 UClass, UProperty, UFunction으로 변환됨. 이렇게 변환이 된 클래스, 프로퍼티, 함수 들을은 언리얼 엔진에 관리가 들어가기 시작된다. 이렇게 변환이 되면 좋은 점은 자동 프로퍼티 초기화 C++의 경우에는 생성자나 기본 Initializer를 통해서 초기화하지 않으면 쓰레기 값이 들어감 UPROPERTY() 마킹하는 경우네는 자동으로 값이 0으로 기본으로 채워진다. 레퍼런스 자동 업데이트 언리얼 시스템이 제공하는 자동 메모리 관리에 이점을 받을 수 있다 라는 것으로 이해. Serializati..
리플렉션 시스템 리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능. 이는 엄청나게 유용하고 언리얼 엔진 테크놀로지의 근간을 이룸 에디터의 DetailPanel, Serialization, GC, Network Reflication, Blueprint 등 다수의 시스템에 탑재된 것 C++은 어떠한 형태의 Reflection도 지원하지 않아, 언리얼에서는 자제척으로 c++ class, Struct, 함수, 멤버 변수, Enum 관련 정보를 수집, 질의, 조작하는 별도의 시스템이 구축되어 있다. 리플렉션은 '프로퍼티 시스템'이라고도 부른다, 이유는 '리플렉션'이라는 용어는 그래픽 용어이기도 하기 때문이다. Reflication 시스템은 옵션이다. Riflection 시스템에 보이..