전체 코드
1. Vector3란?
✅ Vector3의 개념
Vector3는 Unity에서 3차원 벡터를 표현하는 구조체(struct)이다.
Vector3는 (x, y, z) 세 개의 float 값을 가지며, 위치, 방향, 크기 등을 표현하는 데 사용된다.
- Transform 컴포넌트의
position, rotation, scale 속성에서 주로 사용된다.
2. Vector3의 주요 용도
✅ 1. 위치 벡터 (Position Vector)
- 특정 좌표를 나타내는 벡터.
- 예:
(10, 5, 0) → x축 10, y축 5, z축 0의 위치를 의미.
- 활용 예시:
Transform.position, Transform.localPosition 등.
✅ 2. 방향 벡터 (Direction Vector)
- 두 점 사이의 방향을 나타내는 벡터.
- 방향 벡터는 출발지에서 목적지로 향하는 벡터이며, 아래와 같이 계산된다:
방향 벡터 = 목적지 위치 - 출발지 위치
- 활용 예시:
- 캐릭터 이동 방향 설정.
- 타겟(적)과 플레이어 간의 방향 계산.
3. 방향 벡터를 활용하여 구할 수 있는 값
✅ 1. 거리 (Magnitude)
✅ 2. 정규화된 벡터 (Normalized Vector)
4. Vector3 예제 코드 분석
✅ 사용자 정의 Vector3 구조체 (MyVector)
struct MyVector
{
public float x;
public float y;
public float z;
- Unity의
Vector3와 비슷하게 동작하는 사용자 정의 벡터 구조체이다.
✅ 벡터 크기 (magnitude) 계산
public float magnitude { get { return Mathf.Sqrt(x*x + y*y + z*z); } }
Mathf.Sqrt(x*x + y*y + z*z)을 사용하여 벡터의 크기(거리)를 계산한다.
✅ 정규화된 벡터 (normalized) 계산
public MyVector normalized { get { return new MyVector(x / magnitude, y / magnitude, z / magnitude); } }
- 크기를 1로 조정하여 방향만 남김.
magnitude로 각 요소를 나누어 단위 벡터를 생성한다.
✅ 생성자 (Constructor)
public MyVector(float x, float y, float z)
{
this.x = x;
this.y = y;
this.z = z;
}
MyVector 객체를 생성할 때 x, y, z 값을 초기화하는 역할.
✅ 연산자 오버로딩
1. 벡터 덧셈 (+ 연산자)
public static MyVector operator +(MyVector a, MyVector b)
{
return new MyVector(a.x + b.x, a.y + b.y, a.z + b.z);
}
- 두 벡터를 더함.
- 예:
(1, 2, 3) + (4, 5, 6) = (5, 7, 9)
2. 벡터 뺄셈 (- 연산자)
public static MyVector operator -(MyVector a, MyVector b)
{
return new MyVector(a.x - b.x, a.y - b.y, a.z - b.z);
}
- 두 벡터의 차이를 계산.
- 예:
목적지 위치 - 출발지 위치 = 방향 벡터.
3. 벡터와 스칼라 곱 (* 연산자)
public static MyVector operator *(MyVector a, float d)
{
return new MyVector(a.x * d, a.y * d, a.z * d);
}
- 벡터 크기 조절.
- 예:
(1, 2, 3) * 2 = (2, 4, 6)
✅ Vector3 방향 벡터 활용 예제
void Start()
{
MyVector to = new MyVector(10.0f, 0.0f, 0.0f);
MyVector from = new MyVector(5.0f, 0.0f, 0.0f);
MyVector dir = to - from;
dir = dir.normalized;
MyVector newPos = from + dir * _speed;
}
- 방향 벡터를 이용하여 캐릭터 이동 방향을 설정하는 코드.
5. Unity에서 Vector3 활용
✅ 목적지로 향하는 방향 벡터 구하기
void Start()
{
Vector3 to = new Vector3(10.0f, 0.0f, 0.0f);
Vector3 from = new Vector3(5.0f, 0.0f, 0.0f);
Vector3 dir = to - from;
}
✅ Vector3의 magnitude와 normalized 활용
void Start()
{
Vector3 dir = new Vector3(3, 4, 0);
float distance = dir.magnitude;
Vector3 unitDir = dir.normalized;
}
magnitude: 벡터 크기(거리) 반환.
normalized: 크기 1로 조정된 벡터 반환.
✅ 캐릭터 이동 구현
void Update()
{
if (Input.GetKey(KeyCode.W))
transform.position += Vector3.forward * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.S))
transform.position += Vector3.back * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.A))
transform.position += Vector3.left * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.D))
transform.position += Vector3.right * Time.deltaTime * _speed;
}
position을 변경하여 캐릭터를 이동하는 코드.
✅ 회전한 오브젝트의 이동 문제 해결
void Update()
{
if (Input.GetKey(KeyCode.W))
transform.Translate(Vector3.forward * Time.deltaTime * _speed);
}
Translate()는 로컬 좌표 기준 이동을 수행하므로, 오브젝트가 회전해도 올바르게 이동할 수 있다.