오늘 배운 내용
- 위치 이동 구현
1. Position
- 유니티에서 오브젝트의 위치 정보는 x, y, z 로 구성된 3축이 있다.
- 유니티에서
Vector3 클래스를 통해 간편하게 다룰 수 있으며, 이를 사용해 게임 오브젝트의 위치 이동을 구현할 수 있다.
Transform.position = new Vector3(x, y, z);
Transform.Translate(Direction * Speed);
Transform.position = Vector3.Lerp(StartPosition, EndPosition, Interpolation);
Transform.position = Vector3.MoveTowards(transform.position, Target.Position, Speed);
2. Rotation
- 인스펙터의 Transform 컴포넌트에서는 회전값이 포지션과 동일하게 x, y, z축으로 보여지지만 내부 동작은 4원소를 사용하는 쿼터니언(Quaternion)을 통해 이뤄진다. (연산속도가 빠르고 3축을 사용했을 때의 짐벌락 현상을 방지하는데 효과적이다.)
- 쿼터니언은 연산적으로 효과적이지만, 유니티 입문시점으로는 이해하기 복잡한 개념이다. 때문에 보다 직관적인 3축으로 컨트롤 가능한 Quaternion클래스의 오일러(Euler)를 사용한다.
Transform.rotation = Quaternion.Euler(x, y, z);
Transform.Rotate(Vector3.up, Speed);
Transform.RotateAround
Transform.LookAt(Target.position);
3. Scale
- 이름 그대로 게임 오브젝트의 크기를 비율로 지정하는 요소이다.
Transform.localScale = new Vector3(x, y, z);
Transform.lossyScale
위치 이동 구현
- 프레임 (Frame)
- 기준이 되는 그래픽을
초당 몇 프레임 풀력하는가(FPS : Frame Per Second)
- 프레임마다 연산을 수행하는데 프레임 출력수가 다르고, 메서드가 호출되는 횟수가 달라진다면 PC사양에 따라 오브젝트의 이동속도가 달라지거나 의도치 않은 판정이 나타나는 등의 문제가 생길수 있다.
- 델타 타임(Delta Time)
- 1프레임의 갱신에 소요되는 시간
- 1 / FPS = Delta Time
private void Move()
{
float direction = Input.GetAxisRaw("Vertical")
transform.Translate(Vector3.forward * direction * _moveSpeed * Time.deltaTime);
}