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로 바꿔서 활용할수도 있겠다.
적용
캐릭터가 일정 거리안에 들어오면 공격을 시작하고 캐릭터가 너무 가까워지면 도망가는 것을 연출해보았다.
'Unity 3D > Unity3D' 카테고리의 다른 글
[Unity 3D] Physics.OverlapSphere (주변 콜라이더 추출하기) (3) | 2019.11.02 |
---|---|
[Unity3D] 레이캐스트 정리 (7) | 2019.10.23 |
[Unity 3D] FixedUpdate (유도탄 만들기) (2) | 2019.05.13 |
[Unity 3D] Time.deltaTime 과 Update (0) | 2019.05.12 |