Struct Vector3

속성 설명
magnitude 벡터의 길이 (Read Only)
normalized 크기가 1인 벡터, 정규화 벡터 (Read Only)
sqrMagnitude 벡터의 길이의 제곱 (Read Only)
x 벡터의 x 성분 (3D 공간의 x 좌표)
y 벡터의 y 성분 (3D 공간의 y 좌표)
z 벡터의 z 성분 (3D 공간의 z 좌표)

정규화 벡터 (normalized Vector)

  • 벡터는 크기와 방향을 나타낼 수 있는 데이터 타입으로, 그중 각 축의 크기가 1인 벡터
  • Normalized Vector
  • 즉, 방향만 표시하는 벡터
정규화 벡터 메소드 벡터 좌표
⭐️ Vector3.forward Vector3(0,0,1)
Vector3.back Vector3(0,0,-1)
Vector3.left Vector3(-1,0,0)
⭐️ Vector3.right Vector3(1,0,0)
⭐️ Vector3.up Vector3(0,1,0)
Vector3.down Vector3(0,-1,0)
⭐️ Vector3.one Vector3(1,1,1)
⭐️ Vector3.zero Vector3(0,0,0)

🌟 유니티에서는 Vector의 평가를 왼손 좌표계를 사용하기 때문에 Vector3.forward 의 경우 z축(앞으로) 이동

Translate

게임 오브젝트의 이동 처리를 편하게 할 수 있는 함수

void Translate(Vector3 direction, [Space relativeTo])
  • 두번째 인자 [Space relativeTo]는 게임오브젝트의 월드 좌표 (Space.World)기준으로 이동할 지
  • 로컬 좌표 (Space.Self)를 기준으로 할지 결정
  • 생략시 Local 좌표 기준으로 이동 참조 [[2023-09-15-Unity_Space]]

Time.deltaTime

  • 이전 프레임의 시작 시각부터 현재 프레임이 시작되는 시각의 차 (delta)를 뜻함
  • 이전 프레임부터 현재 프레임까지 걸린 시간의 차
playerTr.Translate(Vector3.forward * (Time.deltaTime * 1.0f), Space.Self);

⭐️ 30 fps

  • 1 frame 마다 1 유닛을 이동한다고 하였을때 Update 함수에서 실행되는 횟수는 30회
  • 구동 환경의 Time.deltaTime은 1 / 30 (0.033/s)

⭐️60 fps

  • 1 frame 마다 1유닛을 이동한다고 하였을 때 Update 함수에서 실행되는 횟수는 60회
  • 구동 환경의 Time.deltaTime은 1 / 60

🌟 Update또는 LateUpdate 등에 이동 및 회전에 대한 설정이 들어가면 Time.deltaTime을 사용해야 한다.

// 프레임마다 10 유닛씩 이동 (구동 환경에 따라 달라짐)
transform.Translate(Vector3.forward * 10)

// 매 초 10 유닛씩 이동 (구동 환경에 상관 없이 일정한 속도를 유지)
transform.Translate(Vector3.forward * Time.deltaTime * 10)

🌟 정규화를 통해 방향만을 추출하지 않으면 대각선 이동 시에 속도가 증가하는 문제가 발생함

private void Update()  
{  
	var horizontalMove = Input.GetAxis("Horizontal"); // -1.0f ~ 0.0f ~ +1.0f;  
	var verticalMove = Input.GetAxis("Vertical"); // -1.0f ~ 0.0f ~ +1.0f;  

	var moveDirection 
		= (Vector3.forward * verticalMove) + (Vector3.right * horizontalMove);  
  
// Transform 컴포넌트의 position 속성값을 변경 (normalized)// playerTr.position += Vector3.forward * 1;  
// Translate 함수 적용 (로컬 좌표 이동 시 Space.Self 생략 가능)  
// playerTr.Translate(Vector3.forward * 1.0f, Space.Self);  
// deltaTime적용으로 frame rate에 영향을 받지 않음  
// 정규화를 통해 방향성만 추출하여 이동 속도를 유지 할 수 있도록 해야 함  
// 정규화를 사용하지 않을 시 피타고라스 정리에 의하여 속도가 1.4이상이 나오게 됨  
	playerTr.Translate(
		moveDirection.normalized * (Time.deltaTime * moveSpeed), Space.Self);  
}
privatw void Start()
{
	var vector1 = Vector3.Magnitude(Vector3.forward);
	var vector2 = Vector3.Magnitude(Vector3.forward + Vector3.right);
	var vector3 = Vector3.Magnitude(Vector3.forward + Vector3.right).normalized;

	Debug.Log(vector1);  / 1
	Debug.Log(vector2);  / 1.414214
	Debug.Log(vector3);  / 1
}