분류 전체보기

    7-3 언리얼 컨테이너 라이브러리 - 구조체

    7-3 언리얼 컨테이너 라이브러리 - 구조체

    간만! 구조체다. https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayArchitecture/Structs/UsingStructs/ Using Structs Get started using Structs with this short guide docs.unrealengine.com 5.1 버전에서는 Using Structs 문서가 없다...(왜지?) 구조체 구성 구조체를 정의하려는 헤더(.h) 파일을 엽니다 . C++ 구조체를 정의 하고 USTRUCT그 앞에 구조체에 필요한 UStruct 지정자를 포함하여 매크로 를 추가하세요 . GENERATED_BODY구조체 상단에 매크로를 추가하세요 . 이제 구조체의 멤버 변수에 태그를 지정하..

    7-2. 언리얼 컨테이너 라이브러리 - TSet

    7-2. 언리얼 컨테이너 라이브러리 - TSet

    TSet의 특징 STL의 set과 언리얼 TSet의 비교 STL set의 특징 STL set은 이진 트리(Red-Black Tree)로 구성되어 있어 정렬을 지원함. STL set은 메모리 구성이 효율적이지 않음. STL set은 요소가 삭제될 때 규형을 위한 재구축이 일어날 수 있음. STL set의 모든 자료를 순회하는데 적합하지 않음. 언리얼 TSet의 특징 TSet은 해시 테이블 형태로 키 데이터 구축되어 있어 빠른 검색이 가능함. TSet은 동적 배열의 형태로 데이터가 모여있음 TSet의 데이터는 빠르게 순회할 수 있음. TSet의 데이터는 삭제해도 재구축이 일어나지 않음. TSet의 자료에는 비어있는 데이터가 있을 수 있음. 따라서 STL set과 언리얼 TSet의 활용 방법은 서로 다르기 때..

    7-1. 언리얼 컨테이너 라이브러리 - TArray

    7-1. 언리얼 컨테이너 라이브러리 - TArray

    언리얼 컨테이너 라이브러리 언리얼 엔진이 자체 제작해 제공하는 자료구조 라이브러리 줄여서 UCL(Unreal Container Library) 라고도 함. 언리얼 오브젝트를 안정적으로 지원하며 다수 오브젝트 처리에 유용하게 사용됨. 언리얼 C+은 다양한 자료구조 라이브러리를 직접 만들어 제공하고 있음. 실제 게임 제작에 유용하게 사용되는 라이브러리로 세 가지를 추천함. TArray, TMap, TSet (여기서 T는 Template를 의미 C++ STL과 언리얼 컨테이너 라이브러리의 차의점 C++ STL은 범용적으로 설계되어 있다. C++ STL은 표준이기 때문에 호환성이 높다. C++ STL에는 많은 기능이 엮여 있어 컴파일 시간이 오래걸림. 언리얼 컨테이너 라이브러리는 언리얼 엔진에 특화되어 있음. ..

    6. Delegate - 2

    CourseInfo // Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "CourseInfo.generated.h" DECLARE_MULTICAST_DELEGATE_TwoParams(FCourseInfoOnChangedSignature, const FString&, const FString&); /** * */ UCLASS() class UNREALDELEGATE_API UCourseInfo : public UObject { GENERATED_BODY() public: U..

    6. Delegate - 1

    느슨한 결합 강한 결합 클래스들이 서로 의존성을 가지는 경우를 의미한다. Person 생성자에서 Card 매개변수를 받고있을때 Card가 없는경우 Person은 만들어질 수 없다. 이 때 Person은 Card에 대한 의존성을 가진다고 한다. 핸드폰에서도 인증할 수 있는 새로운 카드가 도입되면 또 다시 복잡한 대응을 해야 한다. 느슨한 결합 실물에 의존하지 말고 추상적 설계에 의존하라. (DIP 원칙) 왜 Person과 Card가 필요할까? -> 출입을 확인해야 하기 때문 그러면 출입에 관련된 추상적인 설계에 의존하다. ICheck을 상속받은 새로운 카드 인터페이스를 선언해 해결 한다. 이러한 느슨한 결합 구조는 유지 보수를 손쉽게 만들어준다. 델리게이트(Delegate) 그러면 함수를 오브젝트처럼 관리..

    5. 컴포지션

    컴포지션 객체 지향 설계에서 상속이 가진 Is-A 관계만 의존해서는 설계와 유지보수가 어려움. 컴포지션은 객체 지향 설계에서 Has-A관계를 구현하는 설계 방법 컴포지션의 활용 복합적인 기능을 거대한 클래스를 효과적으로 설계하는데 유용하게 사용할 수 있음. 모던 객체 설계 기법과 컴포지션 좋은 객체지향 설계 패턴을 제작하기 위한 모던 객체 설계 기법 (SOLID) Single Responsivility Principle (단일 책임의 원칙) 하나의 객체는 하나의 의무만 가지도록 설계한다. Open-Closed Principle (개방 폐쇄 원칙) 기존에 구현된 코드를 변경하지 않으면서 새로운 기능을 추가할 수 있도록 설계한다. Liskov Substitution Principle (리스코프 치환의 법칙)..

    4. 인터페이스

    하... 야근 짱짱많다 ㅠㅠ 인터페이스 인터페이스란? 객체가 반드시 구현해야 할 생동을 지정하는데 활동되는 타입 다형성(Polymorphism)의 구현, 의존성이 분리(Decouple)된 설계에 유용하게 활용 언리얼 엔진에서 게임 콘텐츠를 구성하는 오브젝트의 설계 예시 월드에 배치되는 모든 오브젝트, 안 움직이는 오브젝트를 포함(Actor) 움직이는 오브젝트 (Pawn) 길찾기 시스템을 받느시 사용하면서 움직이는 오브젝트 (INavAgentInterface 인터페이스를 구현한 Pawn) 이번 예제 수업에 참여하는 사람과 참여하지 않는 사람의 구분 수업에 반드시 참여해야 하는 학교 구성원 : 학생, 선생 수업에 참여하지 않는 학교 구성원 : 교직원 수업 행동에 관련된 인터페이스 : ILessonInterf..

    3-2. 언리얼 오브젝트 리플렉션 시스템

    이제 이 리플렉션 시스템을 사용하는 예제를 만들어보자 새로운 클래스를 만들자 UCLASS() class OBJECTREFLECTION_API UMyGameInstance : public UGameInstance { GENERATED_BODY() public: UMyGameInstance(); virtual void Init() override; private: UPROPERTY() FString SchoolName; }; 그리고 FString 변수에 언리얼이 관리 할수 있게 UPROPERTY() 매크로를 넣어둔다. void UMyGameInstance::Init() { Super::Init(); UE_LOG(LogTemp, Log, TEXT("====================")); UClass* C..