안녕하세요 ~ 여전히 폭염이 물러나지 않는 월요일입니다 :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를 만들 때 유용하게 사용했던 함수입니다 ! 개발하시는 분들께 조금이라도 도움이 되셨기를 바랍니다 ~
'Unity (C#) > Old' 카테고리의 다른 글
유니티 마우스 이벤트 알아보기 (2) (0) | 2018.08.15 |
---|---|
유니티 마우스 이벤트 알아보기 (1) (0) | 2018.08.14 |
유니티 오브젝트 활성화/비활성화 시키기 (보이게, 안보이게 하기) (0) | 2018.08.09 |
유니티 캐릭터 움직이기 (0) | 2018.08.07 |
유니티 제한시간/누적시간 만들기 (0) | 2018.08.06 |
최근댓글