2024.12.19

한경식·2024년 12월 24일

오늘의 키워드 STL Set


STL 이란?

Standard Template Library의 약자로 C++ 프로그래밍 언어의 표준 라이브러리
프로그래밍에 필요한 자료구조와 알고리즘을 템플릿 형태로 제공

장점

다양한 데이터 타입에 대한 동일한 알고리즘 적용 가능
컴파일 타임 메커니즘 사용하므로 실행 시 효율 좋음
표준화되어 이식성과 확장성에 우수

Set 이란?

고유 키 값을 저장하고 자동으로 정렬해주는 자료구조

기본 특성

  1. 유일성 : 중복된 원소를 허용하지 않아 같은 값을 여러 번 삽입이 불가
  2. 정렬 : 원소들은 자동으로 오름차순으로 정렬되어 범위 기반 연산에 효율적임
  3. 불변성 : 저장된 원소 값은 직접 수정이 불가능 하며, 수정하려면 기존 원소를 삭제 후 새 원소를 삽입해야함
  4. 레드-블랙 트리 : 내부적으로 자가 균형 이진 탐색인 레드-블랙 트리로 구현되어있음
  5. 시간 복잡도 : 균형 이진 트리로 구현되어 있어 삽입, 삭제, 검색 연산의 시간 복잡도가 O(logN)

주요 맴버 함수

  1. 삽입 및 삭제
    • insert() : 원소를 삽입
    • erase() : 특정 원소나 범위의 원소를 삭제
    • clear() : 모든 원소 삭제
  2. 검색 및 접근
    • find() : 특정 원소를 찾아 그 위치의 반복자 반환
    • count() : 특정 원소의 개수를 반환(Set에선 항상 0 또는 1)
    • lower_bound() : 지정된 키 이상의 첫 원소의 반복자 반환
    • upper_bound() : 지정된 키보다 큰 첫 원소의 반복자 반환
  3. 크기 및 용량
    • size() : Set의 원소의 개수를 반환
    • empty() : Set이 비어있는지 확인
    • max_size() : Set이 담을 수 있는 최대 원소 개수 반환

활용

  1. 중복 제거 : 데이터에서 중복을 제거할 때 유용
  2. 정렬된 고유 값 관리 : 정렬된 상태의 고유 값들을 유지할 때 사용
  3. 범위 검색 : 특정 범위의 값을 빠르게 찾을 때 효과적

온라인 세션



온라인 세션에서 오늘 캐릭터의 이동과 카메라 회전에 대해 배웠다|
이를 통해 헷깔리거나 몇몇 용어를 정리해 보았다|

SpringArm

카메라를 제어하는데 사용하는 컴포넌트로 캐릭터와 캐릭터 사이의 거리를 일정하게 유지 시켜준다
또한 카메라가 벽이나 장애물에 충돌할 때 자동으로 카메라의 위치를 조정할 수 있게 해줌으로 카메라가 벽이나 장애물을 통과하지 않고 캐릭터를 보여주게 해준다
플레이어가 회전하거나 빠르게 움직일 때 카메라가 자연스럽고 부드럽게 캐릭터를 따라 움직이게 해준다
bUsePawnControlRotation 옵션을 통해 플레이어 입력애 따라 카메라 회저을 제어할 수 있게 해준다
Socket Offset과 Target Ofsset을 통해 카메라의 정확한 위치를 미세 조정이 가능하다

입력 액션과 입력 매핑 컨텍스트

  • 입력 액션
    • 게임에서 수행할 수 있는 특정 동작을 정의하는 역할을 한다
    • 설정
      • Value Type: 입력 값의 타입을 지정한다
      • Triggers : 입력이 언제 발생할지 결정한다(누를 때, 때었을 때 등)
      • Modifiers : 입력 값을 변형 시킬 수 있다(반전, 스케일 조정 등)
  • 입력 매핑 컨텍스트
    • 여러 입력 액션을 그룹화하고 특정 키나 버튼에 매핑하는 역할을 한다
    • 기능
      • 입력 액션을 하나의 컨텍스트로 묶을 수 있다
      • 런타임 중 컨텍스트를 추가하거나 제거할 수 있어 상황에 따른 입력 관리가 용이하다

Controller Rotation을 이용하는 이유!!

캐릭터의 움직임은 카메라가 현재 바라보는 방향을 기준으로 움직인다
예를 들어 카메라가 플레이어의 오른쪽 방향을 바라보고 있을 때 캐릭터가 앞으로 움직인다 생각해보자
그러면 캐릭터는 카메라가 바라보는 방향을 기준으로 회전하여 움직일 것이다
이러한 기능을 위해 Controller Rotation을 가져와 사용하는 것이다

Forward Vector, Right Vector

Foward Vector

앞뒤 움직임에서 Controller의 회전 값 중 Z 값을 가져와 Forward Vector에 Z 값만 넣어 Vector 값으로 만들어주게 되는데 여기서 의문점이 생겼다
왜 Z 축 값이며 Forward Vector인가
Controller Rotation에서 설명한 내용을 가지고 생각해보자
일단 Forward Vector에 대해 알아야 한다
이는 X축이 1이고 나머지는 0인 Vector(1,0,0) 인 방향 벡터이다

그림을 보고 생각을 해보자 각각의 축을 기준으로 Forward Vector를 구한 뒤 앞으로 움직이게 되면 이동하게 될 방향을 그린 그림이다
이처럼 Z 축이 아닌 다른 축으로 Forward Vector를 만들어 연산하면 카메라 회전에 따라 땅에 박히거나 하늘로 날라가는 등 잘못된 움직임을 보일 것이기 때문에 Z 축 값을 넣은 것이다

Right Vector

Right Vector는 Y축이 1인 Vector(0,1,0)인 방향 벡터이다
Forward Vector에서 설명한 것처럼 Z,X축을 기준으로 Right Vector를 만든 이유도 동일한 이유이다

코딩 테스트


한국이 그리울 땐 서버에 접속하지(x) (1)

수열 (1)

나는야 포켓몬 마스터 이다솜(x) (1)

  • 쉬운 문제들이였지만 생각보다 잘 못풀었던 것 같다
  • 또한 Map에 대해 다시 정리할 수 있었다
  • Map
    • Key, Value를 한 쌍으로 저장하는 STL 컨테이너
    • Key를 가지고 Value를 찾을 수 있다

오늘의 과제


그림 판으로 레벨 디자인 초안 만들기

  • 메이플 인내의 숲 같은 점프 맵을 기획해 보았다
  • 점프 맵을 다니면서 여러 종류의 함정을 피하면서 이동해 도착지점에 가야한다
  • 구현은 내일 숙제로 내주신다해서 액터들의 배치만 하였고 기능은 아직 안넣었다
profile
게임 개발 지망생

0개의 댓글