본문 바로가기
Unity 3D/Unity3D

[Unity 3D] Vector3.Distance (가장 가까운 오브젝트 찾기)

by dbxxrud 2019. 5. 16.

 

Vector3.Distance(Vector3 a, Vector3 b) - a와 b 사이에 거리를 측정해 반환하는 함수

 

 

 

거리를 구하는 방법들

 

Distance 의외에도 거리를 재는 다른 방법들이 있다. Vector3.Distance 와 magnitude는 정확한 거리 계산을 하고, sqrMagnitude는 단순히 두 오브젝트 간의 거리를 비교할 때 사용한다. sqrMagnitude는 루트 계산을 하지 않기 때문에 Distance와 magnitude 보다 속도가 훨씬 빠르다. 루트 계산을 하지않고 벡터 연산만 한 후 그 벡터의 제곱근의 값만을 반환하기 때문이다. 

 

 

예제 

 

아래 예제는 Sphere를 기준으로 Sphere와 제일 가까운 큐브를 찾는것이다. 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ObjectFind : MonoBehaviour
{
    public List<GameObject> FoundObjects;
    public GameObject enemy;
    public string TagName;
    public float shortDis;
 
 
    void Start()
    {
        FoundObjects = new List<GameObject>(GameObject.FindGameObjectsWithTag(TagName));
        shortDis = Vector3.Distance(gameObject.transform.position, FoundObjects[0].transform.position); // 첫번째를 기준으로 잡아주기 
 
        enemy = FoundObjects[0]; // 첫번째를 먼저 
 
        foreach (GameObject found in FoundObjects)
        {
            float Distance = Vector3.Distance(gameObject.transform.position, found.transform.position);
 
            if (Distance < shortDis) // 위에서 잡은 기준으로 거리 재기
            {
                enemy = found;
                shortDis = Distance;
            }
        }
        Debug.Log(enemy.name);
 
    }
}
 
 

 

 

 

위 예제에서는 Distance를 이용해서 가장 가까운 큐브를 찾았지만 sqrMagnitude로 바꿔서 활용할수도 있겠다.

 

 

 

 

 

적용

 

캐릭터가 일정 거리안에 들어오면 공격을 시작하고 캐릭터가 너무 가까워지면 도망가는 것을 연출해보았다.