Vector3 함수와 position

Vector3 만들기

 

유니티에서 Vector3 함수를 F12로 타고 올라가보면 어떻게 구성되어 있는지 확인할 수 있다.

 

여기엔 float 변수 x, y, z를 통해 기본적으로 사칙연산이 구현되어 있다.

 

 

유니티 엔진에 정의되어 있는 Vector3를 직접 구현하여 어떻게 코드가 돌아가는지 알아보자.

 

 

우선 MyVector 구조체를 정의하고, 그 안에 변수 x, y, z와 생성자를 넣는다.

 

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; }
}

 

 

 

여기에서 입력한 좌표를 기반으로 벡터의 방향과 크기를 알 수 있게 magnitude, normalized

마지막으로 사칙연산들을 정의해준다.

 

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 static MyVector operator +(MyVector a, MyVector b)
{
	return new MyVector(a.x + b.x, a.y + b.y, a.z + b.z);
}

 

 

 

이 MyVector 구조체를 통해서 이제 우리는 방향 또한 구할 수 있다.

 

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
}

 

 

 

 

 

 

Position 적용

 

유니티에서 물체의 위치를 정의할 때는 이미 엔진상 정의된 transform.position을 사용한다.

 

오브젝트의 위치를 변화시키려면 transform.position에 Vector3 함수를(역시 이미 정의된 함수) 더해주고 빼는 것으로 물체를 이동시킨다.

 

transform.position += new Vector3.forward * Time.deltaTime;

 

 

그런데 Vector3는 오브젝트의 로컬 좌표를 기준으로 연산한다.

반면, transform.position은 월드좌표를 기준으로 움직인다.

 

 

이렇게 되면 코드는 플레이어가 어느 방향을 바라보고 있든지 상관하지 않는다.

예를들어 오브젝트를 좌우로 움직인다면 앞에 방향을 바라본 채로 꽃게처럼 움직일 것이다. (월드 좌표를 중심으로 움직이는 중)

 

 

 

그래서 로컬을 기준으로 계산 후, 이것을 월드로 변환하여 움직일 수 있게 해주는 함수 TransformDirection을 사용한다.

 

transform.position += transform.TransformDirection(Vector3.forward * Time.detaTime);

 

 

 

 

이렇게 물체의 inspector 창에 보이는 transform 컴포넌트의 position을 이용하는 방법을 알아봤다.

 

 

여기서 끝은 아니고, position을 사용하지 않고 물체를 움직이는 또 다른 방법이 있다.

 

transform.Translate(Vector3.forward * Time.detaTime);

 

처음부터 position을 이용해서 대입해줄 필요 없이, 바로 Translate를 사용할 수도 있다.

Translate() 역시 자기가 바라보고 있는 로컬을 기준으로 하는 연산이다.

 

 

 

 

 


 

 

레퍼런스

 

https://www.inflearn.com/course/mmorpg-%EC%9C%A0%EB%8B%88%ED%8B%B0/dashboard