게임 속에서 벡터는 방향과 크기를 가진 화살표
절대좌표: (x, y, z)
정확한 위치 (절대좌표)
예: transform.position = new Vector3(3, 0, 5);
상대좌표
예:Vector3.forward * 5
A: (-1, 5, 2), (-3, 4), (-6, 8) 모두 방향이 같지만 크기는 다름
크기 공식 : magnitude = Mathf.Sqrt(x² + y² + z²);
예: (1, -1) 벡터는 크기 ≒ 1.414
(3, -3) 벡터는 크기 ≒ 4.242
→ 크기만 3배지만, "속도" 자체가 3배는 아님
(1, -1) * 10x10하면 크기는 1.414 * 10 = 14.14가 됨.즉, A의 방향으로 B의 속력 = 벡터 A * 스칼라 B인 표현은 틀림
→ 방향 벡터 사용.
Vector3 normalized = vector.normalized;velocity = A.normalized * B;두 벡터 사이의 각도 계산 또는 한 방향으로의 정렬도 측정, 반환 타입은 Scaler
| 각도 | 내적 값 |
|---|---|
| 0 | 1 |
| 0~90 | 1 ~ 0 |
| 90 | 0 |
| 90~180 | 0 ~ -1 |
| 180 | -1 |
두 벡터에 수직인 방향의 벡터 반환, 반환 타입은 Vector3
→ 3D 회전, 법선 계산, 회전 방향 판단 등에서 사용
Vector3 right = Vector3.Cross(up, forward);| 항목 | 구조체 (struct) | 클래스 (class) |
|---|---|---|
| 복사 방식 | 값 타입 (값 복사됨) | 참조 타입 (주소 복사됨) |
| 예시 설명 | Vector3 b = a; b.z += 1; → a는 변하지 않음 | MyClass b = a; b.z += 1; → a도 같이 변함 |
Unity의 Vector3는 구조체이기 때문에 다른 변수에 대입 후 값을 바꿔도 원본은 영향을 받지 않음.
Vector3.normalized : 해당 벡터와 방향이 같지만 크기가 1인 벡터 생성a.normalized; (0.6,0.6,0.6);a.magnitude == 크기(거리 or 길이)Vector3.Dot(a,b) == 내적Vector3.Cross(a,b) == 외적응용
Distance함수 내장// dest로 향하는 방향 벡터
Vector3 dir = (destPos - currentPos).normalized;
Vector3 newPos = dir * 10 + currentPos;
Transform의 회전(Rotation) 값은 vector가 아니라
Quaternion 타입
짐벌락같은 이유로 회전 축이 겹치게 됨.
→회전은 항상 “원래” 축을 기준으로 순서대로 처리됨.
transform.rotation = new Vector3(1,2,1); 은 오류!!
Quaternion.Euler(Vector3) 를 대신 대입
Quaternion끼리의 합은 *(곱)로 함.
→ 행렬이기 때문에.
(0,30,0)을 회전 후 (60,0,0)을 회전 VS (60,30,0)을 회전하는 것은 다름
-> 교환법칙 성립 안됨
곱셈 연산을 미리 해서 연산량을 줄일 수 있음.(곱셈 누적 연산)
→ 게임 최적화에 좋음