2024.12.17

한경식·2024년 12월 24일

오늘의 키워드

템플릿 함수


  • 정의
    • 다양한 자료형에 대해 동일한 기능을 수행하는 함수를 작성할 수 있게 해줌
  • 기본 개념
    • 템플릿 함수는 함수의 기능은 결정되어 있지만, 자료형을 나중에 결정할 수 있도록 만드는 함수의 틀이다
  • 주요 특징
    • 선언 방법
      • 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(컨트롤러)에 의해 제어됨
        • 빙의(Possess)라는 개념 존재
      • 캐릭터 클래스는 Pawn을 상속받아 구현되어 있음

좌표계


  • 기즈모 - 좌표계를 보여주는 것을 기즈모라 함 - Unreal은 왼손 좌표계를 사용
  • 월드 좌표, 로컬 좌표
    • 월드 좌표
      • 게임 세상내의 좌표계를 의미함
    • 로컬 좌표
      • 오브젝트 개개인이 가지고있는 좌표계

트렌스폼


  • 트렌스폼은 월드상에서 상대적인 값으로 표시된다
    • 어떠한 액터가 월드에 놓일 때 부모 액터가 존재한다면 부모 액터와 액터간 상대적 위치가 표시됨
  • 위치(Position)
    • 액터가 월드 상에 놓여있는 위치
  • 회전(Rotation)
    • 액터가 월드에서 어느 방향을 향하는지
  • 크기(Scale)
    • 액터의 크기

머터리얼


  • 머터리얼이란?
    • 색상, 재질, 밝기등의 속성을 바꿀 수 있는 시스템
    • Shader를 통해 구현됨
  • 속성
    • 베이스 컬러(Base Color)
      • 물체의 기본 색상(RGB 값)
    • 메탈릭(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에서 매쉬를 그려주는 역할만 따로 빼줌으로써 단일 책임의 원칙을 지켜주도록 하였다

오늘의 느낀점


  • 내일은 시간을 조금 더 알차게 써서 운동까지 가는 것을 목표로 공부를 해야 될 것 같다
  • 공부를 할 때 조금 더 집중을 하여 시간을 알차게 쓰는것도 중요할 것 같다
  • 너무 정리하는 거에 신경이 몰두되어 정작 이해하지 못하고 반복하는 것을 조금씩 고쳐나가야 할 것 같다
profile
게임 개발 지망생

0개의 댓글