본문 바로가기
Unity 게임 제작/C#

transform.position

by Yuriring 2025. 9. 23.

 

모든 게임 오브젝트에는 Transform 컴포넌트가 있음

Transform은 위치 (Position), 회전 (Rotation), 크기 (Scale)를 담고 있으며, 그중 position은 오브젝트의 월드 좌표를 나타냄

 

위치 변경하기

오브젝트를 원하는 좌표로 직접 이동시키려면 transform.position에 새로운 Vector3 값을 대입하면 됨

void Start()
{
    // 시작할 때 (0, 5, 0) 위치로 이동
    transform.position = new Vector3(0f, 5f, 0f);
}

 

이렇게 하면 게임 실행 시 오브젝트가 지정된 좌표에 즉시 이동함

 

위치를 조금씩 이동하기

현재 위치를 기준으로 조금씩 이동시키려면 += 연산자를 사용

void Update()
{
    // 매 프레임마다 x축으로 0.1씩 이동
    transform.position += new Vector3(0.1f, 0f, 0f);
}

 

이 방법은 캐릭터 이동, 탄환 발사체 이동 등 다양한 상황에서 활용됨

단, FPS (초당 프레임 수)가 높은 PC에서는 더 많이 이동하고, 낮은 기기에서는 덜 이동하게 됨

즉, 컴퓨터 성능에 따라 이동 속도가 달라지는 문제 발생

 

Time.deltaTime

이전 프레임과 현재 프레임 사이에 걸린 시간 (초 단위)를 의미

예를 들어, 60FPS : Time.deltaTime = 대략 0.016초

즉, deltaTime을 곱하면 프레임 수와 상관없이 동일한 거리를 이동할 수 있음

 

속도 변수를 이용한 이동

[SerializeField] 
private float moveSpeed = 5f;

void Update()
{
    // 오른쪽(x축)으로 초당 5 단위 이동
    transform.position += Vector3.right * moveSpeed * Time.deltaTime;
}
  • Vector3.right = (1,0,0) 방향 벡터
  • moveSpeed = 초당 이동할 거리
  • Time.deltaTime = 프레임 보정

이렇게 작성하면 FPS가 30이든 120이든, 오브젝트는 1초 동안 정확히 5만큼 이동

 

Vector3의 기본 방향 벡터

  • Vector3.right = (1, 0, 0)
  • Vector3.left = (-1, 0, 0)
  • Vector3.up = (0, 1, 0)
  • Vector3.down = (0, -1, 0)
  • Vector3.forward = (0, 0, 1)
  • Vector3.back = (0, 0, -1)

forward랑 back은 z축 기준이므로 2D게임에서는 잘 안 쓰이고 3D 게임에서 많이 쓰임

 

참고: transform.localPosition
월드 좌표 기준 위치가 아닌 부모 오브젝트 기준 상대 좌표
예를 들어, 캐릭터 손에 붙어 있는 무기의 위치를 조정할 때 사용

 

 

'Unity 게임 제작 > C#' 카테고리의 다른 글

GetKey, KeyCode  (0) 2025.09.23
[SerializeField]  (0) 2025.09.23