ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Unity - c#]Vector3.Magnitude 활용하여 거리 구하기
    unity 2022. 7. 11. 16:41

    Vector(백터)

    백터는 쉽게 말해 크기와 방향을 갖는 물리량이다.

    크기와 방향을 갖는다는 것은 시작 지점과 끝 지점이 존재한다는 뜻으로,

    백터의 크기는 시작 지점에서 끝 지점 사이의 값이라고 생각하면 된다.

     

    Vector2, 3은

    2차원(x, y) 3차원(x, y, z)의 차이만 있을 뿐, Magnitude를 활용하는데 크게 다르지 않음을 미리 숙지 해야 한다.

     

     

    Magnitude(규모)

    시작과 끝이 존재 한다는 것은 그 안에 크기(또는 길이)가 생긴다는 것이고,

    그 크기를 가르키는 것이 Magnitude(규모)가 된다.

     

    유니티에서 magnitude를 사용할 때 float형으로 변환된다.

     

    Magnitude 정의

    //인자로 들어온 벡터의 길이를 반환한다.
    public float magnitude(Vector3 vector)
    
    //인자로 들어온 벡터의 길이의 제곱한 값을 반환한다.
    public float sqrMagnitude(Vector3 vector)

    위 정의 중 sqrMagnitude가 더 빠르게 계산하므로 거리 계산 시 sqrMagnitude을 활용하는 편이 유용하다.

     

    Magnitude를 사용하여 거리 구하기

    private void OnCollisionEnter(Collision collision)
    {
        //설명 a코드
        Vector3 head = collision.transform.position - transform.position;
        //설명 b코드
        float dis = head.magnitude;
    }

    유니티에서 콜라이더가 서로 닿았을 때 이벤트를 처리하는 함수로 닿을 물체와의 거리를 계산한다.

     

    코드 설명

    a 코드

    Vector3 head = collision.transform.position - transform.position;

    ㄱ. collision.transform.position은 이 코드가 적용된 오브젝트와 닿은 물체의 위치 값이고

    ㄴ. transform.position은 이 코드가 적용된 오브젝트의 위치 값을 말한다.

     

    ㄱ에서 ㄴ을 뺐을 때 좌표 값이 head에 저장된다.

     예시)

             ㄱ이 (1, 5, 5)

             ㄴ이 (5, 5, 5)일 경우 head의 값은 (-4, 0, 0)이 된다.

     

    b 코드

    float dis = head.magnitude;

    Vector3인 head에 magnitude를 적용하면 float형으로 바뀌므로 변수 앞에 float을 선언한다.

     

     예시)

            head(x, y, z)를 각각 제곱한 뒤 더하여 제곱근으로 처리한 결과로

            head(-4, 0, 0)를 magnitude로 변환 하면 4로 변환된다.

     

    주의 사항

    오브젝트의 크기에 따라 거리 값이 달라 질 수 있는데,

    크기에 따른 중심점끼리 비교 값이 달라 지기 때문이다.

    A와 같이 중심점과 가깝게 부딪힐수록 거리 값은 0에 가까우며,

    B와 같이 멀어질수록 거리가 높게 측정된다.

     

     

     

     

Designed by Tistory.