[게임 수학] 벡터

LeeTaes·2023년 12월 10일
0

게임수학

목록 보기
2/5
post-custom-banner

1. 벡터와 스칼라

  • 벡터(Vector) : 벡터는 크기와 방향을 가진 양을 나타내는 수학적 개념
  • 스칼라(Scalar) : 크기만을 가지고 방향이 없는 양을 의미
  • 벡터와 반대되는 개념으로 단순히 크기만을 가지고 있습니다.

[1 - 1] 벡터의 주요 특징

  1. 벡터는 크기와 방향을 가지는 양으로 크기는 벡터의 길이를 의미하며, 방향은 벡터가 가리키는 방향을 의미합니다.
  1. 벡터는 덧셈과 뺄셈이 가능합니다.
    ex) A벡터(1, 1) + B벡터(2, 1) = (1+2, 1+1) = (3, 2)
    ex) A벡터(1, 1) - B벡터(2, 1) = (1-2, 1-1) = (-1, 0)
  1. 벡터는 스칼라(Scalar)와 곱셈과 나눗셈이 가능합니다.
    ex) 3 x (1, 2) = (1 x 3, 2 x 3) = (3, 6)
    ex) (2, 4) / 2 = 0.5 x (2, 4) = (0.5 x 2, 0.5 x 4) = (1, 2)

[1 - 2] 벡터 생성 및 크기 구하기

  • 벡터를 만드는 방법은 다음과 같습니다.
    • A(x1, y1)과 B(x2, y2) 사이의 벡터 = (x2 - x1, y2 - y1)
    • 만약 플레이어의 위치(1, 1), 몬스터의 위치(2, 2)가 주어진 경우라면
      플레이어에서 몬스터로 가기 위한 벡터는 (2, 2) - (1, 1)이 됩니다.

  • 벡터의 크기(Magnitude)를 구하는 방법은 다음과 같습니다.
    • 크기 = sqrt(x^2 + y^2)


[1 - 3] 벡터의 정규화

  • 벡터의 정규화(normalize) : 해당 벡터의 크기를 1로 만들어주는 과정
  • 벡터의 크기가 1이 되면 방향은 유지한 채 크기를 표준화할 수 있습니다.
  • 정규화된 벡터는 항상 크기가 1이므로 "단위 벡터(Unit Vector)"라고도 불립니다.


[1 - 4] 게임 개발에서의 벡터의 용도

  • 게임 개발에서 벡터는 다양한 용도로 활용되며, 주로 위치, 방향, 속도 등을 나타내기 위해 사용됩니다.
  1. 위치 표현
    • 게임 오브젝트의 위치를 나타내기 위해 벡터가 사용됩니다.
    • 위치 벡터는 해당 오브젝트가 어디에 위치하는지 정확히 표현합니다.
  2. 이동 및 속도
    • 오브젝트의 이동을 처리할 때 (보통 속도 * 방향 벡터)를 사용합니다.
  3. 카메라 및 시야 관리
    • 플레이어의 시점을 나타내거나, 카메라의 위치 및 방향을 제어할 때 벡터가 사용됩니다.
    • 또한, 카메라가 향하는 방향을 나타내는 시야 벡터로서도 사용됩니다.

2. 벡터 실습 - UE_Blueprint

  • 이전 시간에 만들었던 대포에 유도 기능을 추가해보도록 하겠습니다.
  • 목표 : 발사 후 0.5초가 지나면 Target에게 날라가는 탄환 제작

[2 - 1] Target 생성 및 설정

  • 타겟 역할을 해줄 Buleprint Class를 생성합니다.
  • 타겟이 생성되었으므로 레벨 블루프린트에서 탄환에 타겟을 세팅합니다.
  1. Target BluePrint Class 생성
    간단히 원뿔 모형의 타겟을 생성해 레벨에 배치해줍니다.

  2. 탄환에 Target 변수를 생성하고 SetTarget() 함수를 생성합니다.

  3. 레벨 블루프린트를 열어 탄환 생성과 동시에 Target을 설정해줍니다.


[2 - 2] Target 유도 구현

  • 0.5초가 지난 후 유도를 시작할 것입니다.
  • Target의 위치벡터와 현재 Bullet의 위치벡터를 통해 방향(Unit) 벡터를 생성합니다.
  • 해당 방향으로 Speed만큼 매 프레임 이동하도록 설정합니다.
  1. 0.5초가 지나면 분기될 로직을 구현합니다.
    시간을 저장하기 위한 변수를 설정하고, branch 노드를 통해 분기합니다.

  2. 0.5초 이후 진행될 로직을 구현합니다.
    탄환에서 Target으로 가기 위한 방향벡터를 구해야 합니다.
    (Target의 위치 - 탄환의 현재 위치 = 타겟 방향으로의 벡터)
    (위에서 구한 벡터를 정규화 하면 크기가 1인 방향 벡터가 생성됩니다.)
    방향 벡터에 속도를 곱해 매 프레임 속도만큼 이동하도록 설정합니다. (누적)
    (delta Seconds를 곱한 이유: 모든 컴퓨터에서 동일한 속도로 이동시키기 위함)

  3. 결과 확인

    • 0.5초가 지나기 전

    • 0.5초가 지난 후 유도되는 상황

    • 결과 : 성공적으로 Target을 추적

profile
클라이언트 프로그래머 지망생
post-custom-banner

0개의 댓글