[20260116] GameObject 이동/회전

SmartBear·2026년 1월 16일
post-thumbnail

Transform

  • 사전적 의미: 변환
  • 유니티에서는 형태 및 위치에 대한 변환 컴포넌트
  • 모든 GameObject 는 필수로 Transform 컴포넌트를 갖고 있다.

Position

  • x,y,z 를 기준으로 GameObject의 위치를 나타내주는 기능
  • 자주 사용하는 기능
// Position을 직접으로 변경하는 방법
transform.position = new Vector3(x, y, z);

// Translate 함수를 이용한 축(x, y, z) 기준의 위치이동 방법
// 로컬 좌표로 계산한다.
transform.Translate(Direction * speed);

// 선형 보간을 이용해 거리에 따라 빠르게 이동하며 천천히 감속하는 방법
transform.position = Vector3.Lerp(StartPos, EndPos, InterPoliation);

// 목표지점을 향해 일정한 속도로 일동하는 방법
transform.position = Vector3.MoveTowards(transform.position, Target.Position, speed);

Rotation

  • x,y,z 를 기준으로 GameObject의 회전각을 나타내주는 기능. (쿼타니안 기준)
  • 자주 사용하는 기능
// rotation에 값을 직접 지정해 회전하는 방법
transform.rotation = Quaternion.Euler(x, y, z);

// Rotate 함수를 이용한 회전
transform.Rotate(Vector3.up, Speed);

// RotateAround를 이용한 중심축 기준으로 회전
transform.RotateAround(Target.position, Vector3.up, Speed); 
// 여기서 Target 은 transform. gameobject 로 받을 경우는 gameobject.transform 으로 해야함.

// LookAt을 이용한 대상을 향해 회전시키기
transform.LookAt(Target.position);

// 그 밖에
Quaternion.Slerp(start, end, interpolation); // 두 지점 사이의 구면 선형 보간.
// https://gnaseel.tistory.com/14#google_vignette 사이트 참고!
Quaternion.Identity // 프리팹 자체의 오일러값을 쓰고 싶을 때
eulerAngles // https://blog.naver.com/tlsqudgns6/222193108722 사이트 참고!

Quaternion

  • 오일러 각 링크
    • 강체가 놓인 방향을 3차원 공간에 표시하기 위해 레온하르트 오일러가 도입한 세 개의 각도이다.
  • 짐벌락 현상 링크
    • 짐벌은 하나의 축을 중심으로 물체가 회전할 수 있도록 만들어진 구조물. 세 개의 짐벌로 구성된 구조에서 한 짐벌의 회전축이 다른 두 짐벌의 회전축과 직각을 이루도록 구성이 되면, 가장 안쪽 짐벌의 회전축에 장착된 물체는 바깥 지지대의 회전에 영향을 받지 않는다. like 자이로스코프
    • 3축의 자유도로 회전을 표현할 수 있는 짐벌 고리가 겹쳐지면서, 첫 번째 회전과 세 번째 회전의 두 개 축이 거의 일치하여 자유도가 2축으로 한정되는 사태가 발생
  • 4원수(쿼타니안) 링크
    • 특징
      • 짐벌락이 발생하지 않는다.
      • 행렬보다 점유 메모리 영역이 작고 계산 부하도 낮다.
      • x, y, z 축에 국한되지 않는 임의의 회전축에서의 회전을 손쉽게 할 수 있다.
      • 회전을 간단히 합성할 수 있고 오차도 쉽게 발생하지 않는다.
      • 두 개 회전사이의 매끄러운 보간을 표현할 수 있다.
    • 복소수의 확장. 실수부와 허수부의 두 개의 실수를 사용하여 2차원 복소평면 좌표로서의 벡터를 표현.

Scale

GameObject의 크기를 변화시킬 수 있는 기능이다.

World Space & Local Space

  • 간단히, 절대좌표와 상대좌표
  • 부모/자식으로 이루어진 GameObject에서 자식부모를 기준으로 Local Space를 갖게 된다.

위치 이동 구현

  • Frame ; 정지된 화면
  • FPS(Frame per Second) ; 초당 프레임 수

DeltaTime

  • 이전 frame 시간과 현재 frame 시간의 간격
  • 이동의 자연스러움, 쿨타임등 여러곳에 응용가능

Input Class

  • Nomalized ; 대각선 방향으로 이동시 실제보다 더 갈수 있음. 이를 단위 벡터로 재 계산 해줌.
  • GetKey
    • GetKey; 키 입력이 있는 내내 true
    • GetKeyDown; 키를 입력한 순간만 true
    • GetKeyUp; 키를 땐 순간만 true
  • GetAxis & GetAxisRaw
    • 이미 선언된 Input 값들을 불러와 사용할 수 있다.
    • 선언된 값과 선언 할 수 있는 String 은 project setting 에서 확인하자.
    • 둘의 차이는 값을 정수형으로 할 것인지 float 형으로 할 것인지다. GetAxis 가 float 으로 한다.
    • float 형일 경우 패드의 이동 스틱의 기울기까지 인식하여 천천히 이동 및 빠르게 이동이 가능하다 (호오?!)

시연 연상

잘못된 예시

정상 예시

profile
Python Dev with Infra -> Game Programmer

0개의 댓글