반응형

안녕하세요 ~ 여전히 폭염이 물러나지 않는 월요일입니다 :D 요 며칠 계속 이래저래 일이 생겨서 포스팅을 하지 못했네요 .. 오늘은 그나마 일을 빨리 해결해서 포스팅을 하려고 왔습니다 ! 오늘은 오브젝트 간의 거리를 알아내는 방법에 대해 알아볼게요 ~




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Distance : MonoBehaviour {
 
    public GameObject Player;
    public GameObject Enemy;
    private float Dist;
 
    // Update is called once per frame
    void Update () {
        Dist = Vector3.Distance(Player.transform.position, Enemy.transform.position);
    }
 
    void LateUpdate()
    {
        print("Dist : " + Dist);
    }
}
cs

먼저 스크립트 부터 살펴봅시다 ~

친절하게도 유니티 C# 기본 라이브러리 안에는 두 오브젝트 간에 거리를 알아낼 수 있는 함수가 존재합니다 ! 


Vector3.Distance(Player.transform.position, Enemy.transform.position);

바로 이 부분인데요, Vector3.Distance (오브젝트1의 Transform, 오브젝트2의 Transform) 을 넣으면 두 오브젝트 간의 거리를 알 수 있습니다.

(Vector3는 보통 3D 좌표로 사용되고 만약 2D라면 Vector2.Distance로 하시면 됩니다 !)

저는 여기서 Dist 라는 float 자료형안에 두 오브젝트 간의 거리를 저장해 주었습니다.


그리고 저는 바닥역할을 하고 있는 'Plane' 오브젝트에 스크립트를 넣고 두 오브젝트를 각각 'Player'와 'Enemy' 에 드래그드랍 해주었습니다.

(저는 public으로 Gameobject를 선언했기 때문에 인스펙터 상에서 오브젝트를 넣어주었습니다. 만약 스크립트 상에서 대상 오브젝트를 지정하고 싶다면 Gameobject.Find 등을 사용하시면 됩니다.)


(클릭해서 확인해보시면 더 잘 보입니다 !)

지난 포스팅에서 했던 플레이어 조작을 이용해서 빨간 큐브(Enemy)에게 다가가거나 멀어지면 디버그에 거리가 줄어들고, 늘어나는 것을 확인할 수 있습니다 !






개인적으로 게임 제작에 AI를 만들 때 유용하게 사용했던 함수입니다 ! 개발하시는 분들께 조금이라도 도움이 되셨기를 바랍니다 ~


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기