개발 고수(가 되고 싶은) 블로그

엔진공부 8

[언리얼 공부] 인터페이스(Interface) 와 컴포지션(Composition)

인터페이스 사용 이유어떤 객체가 반드시 구현해야할 행동을 지정하는데 활용다형성, 의존성 분리를 위해 사용한다. 특징인터페이스 생성시 두 개의 클래스가 생성U로 시작하는 타입클래스I로 시작하는 인터페이스 클래스 - 실질 클래스 구현하는 곳C++ 인터페이스 vs C# 인터페이스c# 에서는 추상 타입으로만 선언이 가능하지만 C++ 인터페이스는 선언하지 않고 로직을 구현할 수 있다.다만 구현하였을때 장점도 있지만 복잡해 질 수 있으므로 구현을 할예정이라면 차라리 그냥 일반 클래스를 상속받는것이 더 좋아보인다(굉장히 주관적)컴포지션is A 말고 Has A 를 구현하는 방법거대한 클래스를 효과적으로 설계하는데 유용하게 사용 가능언리얼 엔진에서 컴포지션 구현방법CDO (클래스 기본 객체) 에서 생성하는 방법.언리얼 ..

[언리얼 공부] 언리얼 리플렉션 시스템

유니티를 다뤄봤다면 리플렉션 이라는 것을 들어본 적이 있을것이다.  모던 객체지향의 정수라고 불리며 런타임중 자기 자신을 검사하고 조작할 수 있는 기능을 말한다. 이런 리플렉션을 적절히 활용하면 런타임중 클래스, 메서드, 필드등의 메타데이터를 동적으로 조회가 가능하다. 하지만 C++ 은 이전 글에서 다뤘듯이 리플렉션 시스템을 지원하지 않는다. 따라서 언리얼에서 독자적으로(*온몸비틀기를 통해) 리플렉션 시스템을 구축하였는데 오늘은 그 내용을 다뤄보고자 한다. 언리얼의 리플렉션 시스템이란?C++은 원래 리플렉션 지원하지 않는다. 하지만 UBT(Unreal Build Tool)와 UHT(Unreal Header Tool)를 이용하여 리플렉션 시스템이 구축되어있어 사용자는 편하게 사용할 수 있다.언리얼의 에디터..

[언리얼 공부] 언리얼 오브젝트 소개

언리얼의 C++ 은 기존 C++ 과 있어서 차이가 크다. 따라서 C++ 을 했던사람이라면 적응은 빠를 수 있다. 하지만 언리얼 오브젝트 없이 사용한다면 언리얼의 편리함은 가져가지 못한채로 오히려 예측할 수 없는 부분에서 오류가 나서 엉뚱한 부분을 수정하게되곤한다. 그래서 오늘은 언리얼의 특수성과 언리얼의 내부 컴파일 과정을 살펴보고자 한다.언리얼 C++ 이란?성능을 위해 C++을 포기할 수 없었던 언리얼은 C++ 을 사용하되 C# 과같은 모던 객체 지향을 추구하고자 하였다.그래서 언리얼에서는 기존 C++ 언어를 확장하여(온몸비틀기를 하여) 모던 객체 지향 설계를 가능하게 하는 새로운 시스템 구축하게 되었다 언리얼 오브젝트 VS 일반 C++ 오브젝트일반 C++ 오브젝트접두사 F 사용FCardData저수준의..

[언리얼 공부] 언리얼 C++ 기본타입과 문자열

언리얼 환경에서 알아두어야할 기본타입과 고려할 점C++ 를 사용하지만 기본타입을 사용하지 않는다.플랫폼 파편화 때문플랫폼 파편화란 ?특정 함수나 타입들이 기기마다 다르게 작동될 수 있는 현상C++ 최신 규약에서는 최소 32비트 보장 하지만 특정 플랫폼은 64 비트일 수도 있음 ( 빅엔디안, 리틀엔디안)단일 기기에서 최고의 성능을 뽑아내는 게임 프로그래밍에 치명적이다.데이터 타입의 애매 모호함은 게임 개발 시 문제를 일으킬 수 있다.네트워크 상에서 데이터 통신이 효율적이고 안정적이어야 한다.언리얼 엔진에서 사용하는 기본 타입bool보편적으로 1byte 로 알려져 있지만 처리하는 os 에 따라 달라질 수 있기때문에 위험하여 크기를 추론해서 사용하는 일은 없는게 안정성에 좋다.헤더에는 가급적 uint8 타입을..

Unity Shader 사용 방법

물체를 화면에 렌더링 하기 위해서는 Shader 를 거쳐 화면에 나타나게 된다. 유니티를 사용함에 있어서도 내장 쉐이더를 사용하거나 용도에 따라 새로 쉐이더를 만들어 사용하는 방법이 있다. 아웃라인 쉐이더를 만들고 싶어서 새로 쉐이더를 만들어보려 시도를 하는데 있는 것도 모르면서 새로 만드는건 건방진거같아서 우선 유니티에 있는 기본 Lit shader 에 대해 각 프로퍼티들의 역할을 공부해 보았다. 기본적으로 Lit Shader 은 빛의 영향을 받는 물리기반 렌더링( Physically Based Rendering )이고 URP 혹은 HDRP 에서 사용시 더 다양한 효과를 볼수 있다. URP 에 있는 기본 Lit shader 이다. 순서대로 설명해볼까 한다. 1. Base Map Diffuse Map, ..

transfrom.Find("name") vs Inspector 에서 GameObject 넣기

우선 프로그래밍적 관점에서 게임이란 간단히 정의하자면 가상의 세계 속에서 물체가 상호작용하는 것을 말한다. 상호작용이 사용자와의 상호작용이거나 물체와 물체 간의 상호작용일 수도 있다. Unity에 있어서 물체를 GameObject로 정의하고 GameObject는 유니티 내의 모든 요소를 표현하는 기본적인 개체 단위를 말한다. 눈에 보이든 보이지 않든 모든 Scene 위의 것은 GameObject로 표현된다. GameObject는 게임의 구성요소를 가지고 있는 컨테이너 역할을 하고 Gameworld에서 위치를 가지고 다른 GameObject와 상호작용을 하면서 게임을 구성한다. GameObject는 다양한 컴포넌트를 가지고 있고 컴포넌트를 이용해 게임오브젝트의 상호작용을 제어할 수 있다. Unity에서 S..

신입 개발자가 유니티 공부하고 포트폴리오 준비한 방법 (게임 개발 취업 준비)

일단 나의 경우에는 전공자 이고 학부생 3학년 때 부터 2년 정도 거의 독학으로 유니티 공부를 하고 바로 졸업 직후 클라이언트 개발자로 취업한 케이스이다. 언리얼은 손대보지도 못한채로 취업했다. 엔진이 취업에 중요한 역할을 하는 것은 아니지만 포폴을 만드는 데에는 중요한 역할을 했던것 같다. (이유는 하단 정리글에 설명) 물론 컴퓨터 사이언스, 운영체제, 자료구조, 알고리즘, C++, DX , opengl, winAPI 같은 기초 적인것은 1~4학년동안 꾸준히 공부를 한 상태이다. 나는 그당시 엔진을 처음 공부하려고 했을 때 굉장히 막막했고 엔진이라는 걸 어떻게 공부해야할지 아무도 알려주지 않아서 막막했을때 공부했던 방법을 공유하려고 글을 작성했다. 1. 책 한권을 정해서 책에 나온내용들을 전부 따라한다..

Addressable PatchSystem 이란

addressable PatchSystem https://www.youtube.com/watch?v=Lx61ZEKEvnQ 이건 실전 가이드. 그룹화 요런거 알랴쥼 주제: Adressable 기본 Resources vs Addressable Resources Addressable - App 에 포함 - App 포함도 가능, 이후 다운로드도 가능 - 빌드된 App 용량이 커짐 - 빌드 된 App 용량이 줄어듬 - 시작로딩이 길어진다 - 시작로딩이 줄어든다. - 필요시 로드 하고 언로드를 할 수 있음. 시작시 굳이 다 로드 안해도 됨 - 필요할 로드하고 언로드가 아니라 시작시 로드 해야하기 때문에 Asset Bundle 정의 여러 에셋을 묶은 그룹 다운로드 가능 Unity 에서 기본적으로 지원하는 기능 단점 ..