사용하는 방법에 따라서 2가지로 벡터가 나뉨
struct MyVector
{
public float x;
public float y;
public float z;
public MyVector(float x, float y, float z) { this.x = x; this.y = y; this.z = z; }
}
x,y,z 좌표를 들고 있다
벡터 더하기 빼기 구현
public static MyVector operator +(MyVector a, MyVector b)
{
return new MyVector(a.x + b.x, a.y + b.y, a.z + b.z);
}
public static MyVector operator -(MyVector a, MyVector b)
{
return new MyVector(a.x - b.x, a.y - b.y, a.z - b.z);
}
기존의 Vector3에 있던 내용을 가져와서 사용
어떤 방향값을 나타내기도 하고 방향의 크기도 나타낸다
두 지점사이의 뺄셈을 이용해서 방향벡터를 추출가능
방향 = 상대방의 위치좌표 - 나의 위치좌표
1)거리(크기) magnitude
2)실제방향 normalized
MyVector to = new MyVector(10.0f, 0.0f, 0.0f)
MyVector from = new MyVector(5.0f, 0.0f, 0.0f);
MyVector dir = to - from; // (5.0f, 0.0f, 0.0f) 방향벡터
//방향 벡터
// 1. 거리(크기) 5
// 2. 실제방향 ->
from(5,0,0) to(10,0,0)
// +
// + +
// +-------+ 밑변^2 + 높이^2 = 대각선^2
//두점사이의 거리
public float magnitude { get { return Mathf.Sqrt(x * x + y * y + z * z); } }
여기서 x2-x1가 아닌이유는 방향벡터 자체가 x(x2-x1)으로 표현되기 때문이다
public MyVector normalized { get { return new MyVector(x / magnitude, y / magnitude, z / magnitude); } }
방향에 대한 정보만 나타낸다.
struct MyVector
{
public float x;
public float y;
public float z;
public float magnitude { get { return Mathf.Sqrt(x * x + y * y + z * z); } }
public MyVector normalized { get { return new MyVector(x / magnitude, y / magnitude, z / magnitude); } }
public MyVector(float x, float y, float z) { this.x = x; this.y = y; this.z = z; }
public static MyVector operator +(MyVector a, MyVector b)
{
return new MyVector(a.x + b.x, a.y + b.y, a.z + b.z);
}
public static MyVector operator -(MyVector a, MyVector b)
{
return new MyVector(a.x - b.x, a.y - b.y, a.z - b.z);
}
public static MyVector operator *(MyVector a, float d)
{
return new MyVector(a.x * d, a.y * d, a.z * d);
}
}
public class PlayerController : MonoBehaviour
{
[SerializeField]
float _speed = 10.0f;
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; // (5.0f, 0.0f, 0.0f) 방향벡터
dir = dir.normalized; // (1.0f, 0.0f, 0.0f)
MyVector newPos = from + dir * _speed;
//방향 벡터
// 1. 거리(크기) 5 magnitude
// 2. 실제방향 -> normalized
}
//Update부분
}