오늘의 키워드
템플릿 함수
- 정의
- 다양한 자료형에 대해 동일한 기능을 수행하는 함수를 작성할 수 있게 해줌
- 기본 개념
- 템플릿 함수는 함수의 기능은 결정되어 있지만, 자료형을 나중에 결정할 수 있도록 만드는 함수의 틀이다
- 주요 특징
- 선언 방법
- template 또는 template 형태로 선언
- 여러 타입을 사용할 경우 template <typename T1, typename T2> 형태로 선언 가능
- 장단점
- 장점
- 코드의 재 사용성 향상
- 소프트웨어의 생산성과 유연성 증가
- 런타임 속도가 빠르다
- 단점
- 컴파일 시간이 상대적으로 느림
- 컴파일러에 따라 지원하지 않을 수 있음
- 디버깅이 어렵다는 단점 존재
- 특수화
- 특정 타입에 대해 다른 동작이 필요한 경우 템플릿 특수화를 통해 별도 처리 가능
클래스 동작 원리
- 클래스란?
- 데이터(멤버 변수)와 기능(멤버 함수)을 하나의 단위로 캡슐화하는 사용자 정의 데이터 타입
- 특징
- 접근 제어
- private : 클래스 내부에서만 접근 가능
- protected : 상속받은 클래스까지 접근 가능
- public : 어디서든 접근 가능
- 생성자와 소멸자
- 생성자
- 클래스 이름과 동일한 이름을 가진 멤버 함수
- 객체가 생성될 때 자동으로 호출
- 반환 타입이 없음
- 멤버 변수 초기화에 사용
- 소멸자
- 클래스 이름 앞에 ~가 붙음
- 객체가 소멸될 때 자동으로 호출
- 매개변수를 가질 수 없음
- 동적 할당된 메모리 해제 등 정리 작업을 수행
- 주의사항
- 생성자는 여러개 정의 가능(오버로딩)
- 소멸자는 반드시 하나만 존재
- 명시적으로 정의하지 않으면 컴파일러가 기본 생성자와 소멸자 제공
- 동적 할당된 메모리는 반드시 소멸자에서 해제해야 됨
- 메모리 관리
- 객체 생성
- 스택 메모리 : MyClass obj;
- 힙 메모리 : MyClass* ptr = new MyClass();
- 맴버 변수 할당
- 객체가 생성될 때 멤버 변수를 위한 메모리 할당
- 멤버 함수는 모든 객체가 공유
- 상속과 다양성
코딩 테스트
일곱 난쟁이(x) (1)
알파벳 개수 (1)
트럭 주차(x) (1)
- 세 문제를 풀었지만 일곱 난쟁이는 조금만 더 고민했으면 맞았을것 같고 트럭 주차 문제는 아이디어 부족으로 틀렸다
- 주말에 다시 한번 풀어봐야겠다
온라인 세션
Unreal 에디터
- 뷰포트(Viewport)
- 월드를 직접 볼 수 있는 영역으로 게임이 실행되는 공간
- 카메라를 조작하며 월드를 탐색하거나 오브젝트들을 배치함
- 아웃 라이너(Outliner)
-현재 씬에 배치된 모든 오브젝트를 계층 구조로 보여줌
- 각 오브젝트를 선택하여 속성을 수정하거나 삭제할 수 있음
- 오브젝트 성격에 따라 조명, 스태틱 메시, VFX와 같은 폴더들로 나누고 오브젝트를 계층적으로 관리하는 것이 관례
- 디테일(Details)
- 선택한 오브젝트의 속성을 보여주고 편집 가능
- 위치(Position), 크기(Scale), 머터리얼등을 수정하거나 특정 속성을 설정 가능
- 콘텐츠 브라우저
- 프로젝트에 사용되는 모든 에셋을 관리
- 에셋을 끌어 뷰포트에 배치할 수 있음
- 메뉴 바
- 화면 상단에 메뉴들이 있는 바
- 파일 저장, 프로젝트 설정, 빌드등 다양한 작업 가능
뷰포트 내 오브젝트 용어
- 월드(World)
- 정의
- 레벨이 존재하는 최상위 컨테이너
- 모든 액터와 구성 요소를 포함
- 역할
- 게임 로직의 전반적인 상태 관리
- 물리 시뮬레이션, 이벤트 처리, 게임 루프 제어
- 특징
- 언리얼 엔진의 API를 통해 월드를 관리하고 상태 변경 가능
- 여러 개의 레벨을 동시에 로드하고 관리 가능
- 레벨(Level)
- 정의
- 게임 또는 프로젝트의 하니의 '씬"을 의미
- 엔진에서 작업하는 공간을 정의
- 월드의 구성 요소들을 담고있음
- 역할
- 게임 환경(맵)을 설계, 액터와 이벤트를 배치하는데 사용
- 여러 레벨을 조합하여 대규모 환경 만듬
- 특징
- 레벨 파일의 확장자는 .umap
- 콘텐츠 브라우저에서 Type == World로 검색하면 레벨 파일을 볼 수 있음
- 액터(Actor)
- 정의
- 월드 내에 존재하는 모든 오브젝트
- 기본적으로 레벨에 배치되거나 생성될 수 있는 개체
- 역할
- 게임플레이 로직을 담당하거나 환경 구성 요소를 나타내는 역할
- 캐릭터, 조명, 카메라, 사운드, 물리 오브젝트등 포함
- 특징
- 액터는 위치, 회전, 크기와 같은 변환(Transform) 속성을 가짐
- Blueprint 또는 C++로 커스텀 액터 만들 수 있음
- 폰(Pawn)
- 정의
- 폰은 액터의 일종으로 플레이어나 AI가 조종할 수 있는 오브젝트
- 게임의 캐릭터를 구현하는데 주로 사용
- 역할
- 플레이어 컨트롤러의 경우 입력을 받아 움직임과 동작 제어
- AI 컨트롤러가 폰을 조작하여 NPC를 구현 가능
- 특징
- Controller(컨트롤러)에 의해 제어됨
- 캐릭터 클래스는 Pawn을 상속받아 구현되어 있음
좌표계
- 기즈모
- 좌표계를 보여주는 것을 기즈모라 함
- Unreal은 왼손 좌표계를 사용
- 월드 좌표, 로컬 좌표
트렌스폼
- 트렌스폼은 월드상에서 상대적인 값으로 표시된다
- 어떠한 액터가 월드에 놓일 때 부모 액터가 존재한다면 부모 액터와 액터간 상대적 위치가 표시됨
- 위치(Position)
- 회전(Rotation)
- 크기(Scale)
머터리얼
- 머터리얼이란?
- 색상, 재질, 밝기등의 속성을 바꿀 수 있는 시스템
- Shader를 통해 구현됨
- 속성
- 베이스 컬러(Base Color)
- 메탈릭(Metalic)
- 물체가 금속인지 비금속인지에 따라 반사 특성을 설정
- 러프너스(Roughness)
- 표면이 얼마나 거친지 설정
- 낮으면 반사가 매끄럽고, 높으면 난반사가 일어난다
- 에미시브(Emissive)
- 물체가 빛을 내는 색상을 설정(밝기와 색상 조절)
- 노멀(Normal)
- 투명도/불투명도(Opacity)
- 머터리얼 인스턴스란?
- 원본 머터리얼 셰이더를 수정하지 않고 파라미터 값만 바꿔서 색상이나 밝기를 변경할 수 있게 하는 시스템
- 이를 통해 퍼포먼스 최적화가 가능
DirectX
- 강의를 보면서 엔진을 세분화 과정을 통해 만들어 가고는 있지만 80프로도 이해가 되지 않는 느낌?이 들어 공부 방법을 조금 고민해봐야겠단 생각이 든다
- 이번 강의에서는 Camera class로 만들어 Shader에 World, View, Projection을 넘겨줄 때 물체에 카메라가 있던 없던 모두 View와 Projection 연산을 계속해서 이어나갔다
- 이때 View, Projection 같은 카메라 변환은 World에서 카메라 공간으로 변할 때 한번만 하면 되기 때문에 Shader에서 World의 Transform과 Camera의 View, Projection 값을 따로 받아오게 나눠 반복하지 않아도 되는 연산을 없애버렸다
- 또한 매쉬를 그리는 Render 과정을 물체 자신인 GameObject에서 했었던 것을 MeshRnederer라는 클래스로 빼주면서 GameObject는 그냥 어떠한 물체이고 MeshRenderer에서 매쉬를 그려주는 역할만 따로 빼줌으로써 단일 책임의 원칙을 지켜주도록 하였다
오늘의 느낀점
- 내일은 시간을 조금 더 알차게 써서 운동까지 가는 것을 목표로 공부를 해야 될 것 같다
- 공부를 할 때 조금 더 집중을 하여 시간을 알차게 쓰는것도 중요할 것 같다
- 너무 정리하는 거에 신경이 몰두되어 정작 이해하지 못하고 반복하는 것을 조금씩 고쳐나가야 할 것 같다