언리얼 18

언리얼5 - 캐릭터 애니메이션 설정

새로운 캐릭터 제작프로젝트에 InfinityBlade 애셋 추가Animation 폴더는 Content / ArenaBattle 아래에 추가 다양한 종류의 캐릭터가 있는데, 그중 Skeleton Asset을 중심으로 애니메이션을 설정함.파일 경로가 달라지면 애니메이션 연결도 끊기고 스켈레톤도 제대로 열리지 않으니 주의.BP_ABCharacterPlayer 블루프린트를 열고스켈레탈 메쉬 컴포넌트를 보면 Use Animation Blueprint로 되어있음.애니메이션 블루프린트 : Anim Class로 등록되어 있는 클래스 정보를 캐릭터가 생성될 때 해당 클래스로부터 애니메이션을 담당하는 인스턴스(언리얼 오브젝트)를 생성해서 관리시키도록 일임. 애니메이션 블루프린트는 Characters안에 만들어져있음.이러한..

언리얼5 - 캐릭터와 입력 시스템

플레이어의 입력과 폰에 대한 기초적인 내용액터와 컴포넌트액터의 구조월드에 속한 콘텐츠의 기본 단위.액터는 트랜스폼을 가지며, 월드로부터 틱과 시간 서비스를 제공받는다.사실 액터는 논리적 개념일 뿐 컴포넌트를 감싸는 포장 박스에 불과함.실질적인 구현은 컴포넌트가 진행하고 액터는 다수의 컴포넌트를 소유하고 있음.다수의 컴포넌트를 대표하는 컴포넌트를 루트 컴포넌트(Root Component)라고 한다.액터는 루트 컴포넌트를 가져야 하며, 루트 컴포넌트의 트랜스폼은 액터의 트랜스폼을 의미한다.블루 프린트를 사용해 배경 사물 액터 추가하기Content Browser에서 블루프린트를 추가하면 상속받을 클래스를 선택하게 됨.단순한 배경 사물을 만들 것이기 때문에 Actor 선택 후 BP_Fountain을 만들고 저장..

언리얼C++ - 언리얼 빌드 시스템

언리얼 에디터 구성언리얼 엔진의 구성에디터 : 게임 제작을 위해 제공되는 응용 프로그램 (일반적으로 인식하는 언리얼 엔진)게임 빌드 : EXE 파일과 리소스로 이루어진 독립적으로 동작하는 게임 클라이언트언리얼 에디터의 특징게임 개발 작업을 위해 다양한 폴더와 파일 이름 규칙이 미리 설정되어 있다.정해진 규칙을 잘 파악하고 프로젝트 폴더와 파일을 설정해야 함.에디터에서 기획과 개발을 완료한 후, 게임 빌드를 통해 최종 게임 빌드를 제작하도록 설정언리얼 에디터의 동작프로젝트 폴더의 uproject 확장자를 더블클릭하면 에디터가 트리거됨.에디터의 실행 방식uproject 확장자는 윈도우 레지스트리에 등록되어 있음.등록이 안되어 있다면 런처를 실행해 등록UnrealVersionSelector 프로그램으로 프로젝..

언리얼 - 14강. 언리얼 오브젝트 관리 2 | 패키지

패키지의 중의적 개념언리얼 엔진은 다양한 곳에서 패키지라는 단어를 사용하고 있음.언리얼 오브젝트를 감싼 포장 오브젝트를 의미함 (언리얼 오브젝트 패키지)개발된 최종 콘텐츠를 정리해 프로그램으로 만드는 작업을 의미함. (게임 패키징)DLC와 같이 향후 확장 콘텐츠에 사용되는 별도의 데이터 묶음을 의미하기도 함 (pkg 파일)포장 오브젝트를 구분을 위해 언리얼 오브젝트 패키지로 부르는 것도 고려언리얼 오브젝트 패키지단일 언리얼 오브젝트가 가진 정보는 저장할 수 있지만, 오브젝트들이 조합되어 있다면?저장된 언리얼 오브젝트 데이터를 효과적으로 찾고 관리하는 방법은?복잡한 계층 구조를 가진 언리얼 오브젝트를 효과적으로 저장과 불러들이는 방법을 통일해야 함.언리얼 엔진은 이를 패키지(UPackage)단위로 언리얼 ..

카테고리 없음 2024.11.21

언리얼C++ - 언리얼 오브젝트 관리 1 | 직렬화(Serialization)

직렬화(Serialization)오브젝트나 연결된 오브젝트의 묶음(오브젝트 그래프)을 디스크나 네트워크로 전송할 수 있는 바이트 스트림으로 변환하는 과정복잡한 데이터를 일렬로 세우기 때문에 직렬화거꾸로 복구시키는 과정도 포함해서 의미직렬화(Serialization): 오브젝트 그래프에서 바이트 스트림으로역직렬화(Deserialization): 바이트 스트림에서 오브젝트 그래프로직렬화가 가지는 장점현재 프로그램의 상태를 저장하고 필요할 때 복원할 수 있음 (게임의 저장)현재 객체의 정보를 클립보드에 복사해서 다른 프로그램에 전송할 수 있음.네트워크를 통해 현재 프로그램의 상태를 다른 컴퓨터에 복원할 수 있음. (멀티플레이어 게임)데이터 압축, 암호화를 통해 데이터를 효율적이고 안전하게 보관할 수도 있음.직..

언리얼C++ - 언리얼 엔진의 메모리 관리

C++ 메모리 관리의 문제점C++은 저수준으로 메모리 주소에 직접 접근하는 포인터를 사용해 오브젝트를 관리.프로그래머가 직접 할당(new)과 해지(delete) 짝 맞추기를 해야한다.이를 잘 지키지 못하는 경우 다양한 문제가 발생할 수 있음.잘못된 포인터 사용 예시메모리 누수(Leak): new를 했는데 delete짝을 맞추지 못함. 힙에 메모리가 그대로 남아있음.허상(Dangling) 포인터: (다른 곳에서) 이미 해제해 무효화된 오브젝트의 주소를 가리키는 포인터와일드(Wild) 포인터: 값이 초기화되지 않아 엉뚱한 주소를 가리키는 포인터.잘못된 포인터 값을 다양한 문제를 일으키며, 한 번의 실수가 프로그램을 종료시킴.게임 규모가 커지고 구조가 복잡해질수록 프로그래머가 실수할 확률은 크게 증가.C++ ..

언리얼C++ - 언리얼 컨테이너 라이브러리 2 | 구조체와 Map

언리얼 구조체 UStruct언리얼 구조체(UStructs)는 프로퍼티를 체계화하고 조작할 수 있는 데이터 구조체. 즉, 데이터에 특화커스텀 변수 타입을 생성할 수 있고 프로젝트를 체계화할 수 있음.데이터 저장/전송에 특화된 가벼운 객체대부분 GENERATED_BODY 매크로를 선언해준다.리플렉션, 직렬화와 같은 유용한 기능을 지원함GENERATED_BODY를 선언한 구조체는 UScriptStruct 클래스로 구현됨.이 경우 제한적으로 리플렉션 지원.속성 UPROPERTY만 선언할 수 있고 함수 UFUNCTION은 선언할 수 없음. (언리얼 오브젝트와 큰 차이점)언리얼 엔진의 구조체 이름은 F로 시작.대부분 힙 메모리 할당(포인터 연산)없이 스택 내 데이터로 사용됨.NewObject API를 사용할 수 없..

언리얼C++ - 언리얼 컨테이너 라이브러리 1 | Array와 Set

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

언리얼C++ - 델리게이트(Delegate)

느슨한 결합의 장접과 이를 편리하게 구현하도록 도와주는 델리게이트발행 구독 디자인 패턴언리얼 델리게이트를 활용한 느슨한 결합의 설계와 구현 학습강한 결합과 느슨한 결합강한 결합(Tight Coupling)클래스들이 서로 의존성을 가지는 경우아래 예시에서 Card가 없는 경우 Person이 만들어질 수 없다.이 때 Person은 Card에 대한 의존성을 가진다.핸드폰에서도 인증할 수 있는 새로운 카드가 도입된다면?느슨한 결합(Loose Coupling)실물에 의존하지 말고 추상적 설계에 의존하라. (DIP 원칙)왜 Person은 Card가 필요한가? 출입을 확인해야 하기 때문출입에 관련된 추상적인 설계에 의존하자ICheck를 상속받은 새로운 카드 인터페이스를 선언해 해결새로운 인증 방법이 생겨도 IChec..

언리얼C++ - 컴포지션(Composition)

컴포지션(Composition)객체 지향 설계에서 상속이 가진 Is-A 관계에만 의존해서는 설계와 유지보수가 어려움컴포지션은 객체 지향 설계에서 Has-A 관계를 구현하는 설계 방법컴포지션은 복합적인 기능을 거대한 클래스를 효과적으로 설계하는데 유용하게 사용할 수 있음class Card{public: Card(int InId) : Id(InId) {} int Id = 0;};class Person{public: Person(Card InCard) : InCard(InCard) {}protected: Card IdCard;} 모던 객체 설계 기법의 설계 핵심은 상속을 단순화하고, 단순한 기능을 가진 다수의 객체를 조합해 복잡한 객체를 구성하는데 있음.(SOLID)언리얼 엔진에서의 컴포지션 구현하나의 언리얼..

반응형