Suggest a change
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Close
Submission failed
For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Close
Your name
Your email
Suggestion*
Cancel
Description
Returns the distance between a
and b
.
Vector3.Distance(a,b)
is the same as (a-b).magnitude
.
using UnityEngine; using System.Collections;public class ExampleClass : MonoBehaviour { public Transform other;
void Example() { if (other) { float dist = Vector3.Distance(other.position, transform.position); print("Distance to other: " + dist); } } }
Introduction
In this article we will see different ways to calculate the distance between two objects in Unity, this can be useful for example to know how far is the character from a certain point of the scenario or to activate mechanisms when the character is at a certain distance.
Dear reader
In the channel there lots of videos about Blender, Unity and programming
in which we solve different problems and we provide useful information on these topics.
🍷🧐
Setting up the scene
Let’s make a very simple scene that will have two spheres with 3D texts to indicate the number of the sphere and the distance between them.
The camera will have assigned the Script named “Distances” which is the one that will calculate the distance and write the values on the screen. As an extra, we’ll add a Line Renderer component to draw a line from one object to another.
In figure 2, we see that there are fields for both objects and for the distance indicator. We also have an enum that allows us to choose if we want to calculate the distance in space or projected in a certain plain.
Preparing the Script
The Script that solves the calculations calls “Distances” (complete Script at the end of the article), in the following figure, we can see the fields defined in this Script and the Start method.
We have serialized fields (appear in the inspector) to assign the two spheres from the hierarchy, a TextMesh component for the distance indicator and the enum that allows us to choose which distance we want to measure.
In the Start method, we find the reference of the Line Renderer assigned to the GameObject camera.
In the Update method, we are going to do the calculations, for this, we define two methods “CalculateDistanceInSpace” and “CalculateDistanceXYPlane”, this last one takes into account only the X and Y components of the objects as if the objects were projected in the XY plane, this is useful when we use the orthographic view. In figure 6 we can see these methods.
Article about “Methods” in programming
MOST SEARCHED VIDEOS FROM MY CHANNEL
ABOUT UNITY
ABOUT BLENDER
Calculate distance between two objects in space — Vector3
Let’s start by looking at how to calculate the distance between two objects in space, i.e. considering the three dimensions of the scene.
The CalculateDistanceInSpace method in Figure 6 takes care of this. As you can see, the “Distance” function of the Vector3 class is used and we use the positions of the objects as parameters, this method will return the distance between the two vectors.
Calculate distance between two objects in the plane — Vector2
If we are working in 2D or if we are interested in knowing the distance between two objects projected on a plane, we can calculate this distance using only two dimensions of the scene.
The CalculateDistanceInXYPlane method in Figure 6 takes care of this. As you can see, the Distance method of the Vector2 class is used, two vectors are built using only the x and y components of the position of the objects and they are passed as parameters to the Distance method of Vector2.
In the following video, we can see the difference between these two ways of calculating distances between objects in Unity.
Conclusion
We have seen how to use the classes Vector3 and Vector2 to calculate distances between objects in space and in the plane respectively.
In general Unity works in 3D space, therefore to measure distances in two dimensions it is necessary to project the points in some plane. We have to take into account that there are several planes that we can use, in this case, we used the XY plane, but there is also the XZ, the YZ plane and we can even define a plane oriented in any direction.
Appendix
Here you can see the complete script that calculates the distance between two objects in Unity.
Базовые операции
Вывод сообщений в консоль
Debug.Log(“String First”);
Debug.Log(“String Second”);
Debug.Log(“String Third”);
Движение и вращение локально
Движение и вращение локально
Движение с учётом текущего угла поворота
transform.Translate(0, 0, speedMove * Time.deltaTime);
transform.Rotate(0, speedRotating * Time.deltaTime, 0);
Движение и вращение глобально
Движение и вращение глобально
Движение в глобальном мире
transform.Translate(0, 0, speedMove * Time.deltaTime, Space.World);
transform.Rotate(0, speedRotating * Time.deltaTime, 0, Space.World);
Движение объекта в направление цели
Движение объекта в направление цели
GameObject targerGameObject = GameObject.Find(“Sphere”);
transform.position = Vector3.MoveTowards(transform.position, targerGameObject.transform.position, speed * Time.deltaTime);
Получение положения объекта
Получение положения объекта
Vector3 pos = gameObject.transform.position;
string s = pos.x + ” ” + pos.y + ” ” + pos.z;
Получение расстояния между объектами
Получение расстояния между объектами
GameObject person_1 = gameObject;
GameObject person_2 = GameObject.Find(“Sphere”);
float d = Vector3.Distance(person_1.transform.position, person_2.transform.position);
Vector3 pos = GameObject.Find(“Sphere”).transform.position – transform.position;
Quaternion rotation = Quaternion.LookRotation(pos);
transform.rotation = rotation;
Получить угол поворота по оси Y
Получить угол поворота по оси Y
float yyy = gameObject.transform.rotation.y;
Изменение координат точки
Изменение координат точки
Vector3 p = new Vector3(0, 0, 0);
gameObject.transform.position = p;
Сделать приложение во весь экран.
Screen.fullScreen = true;
На данном рисунке я попытался максимально изложить суть.
Изображение
Черные стрелки – мировые координаты. Соответственно пытаюсь получить расстояние между объектами, а точнее разницу между координатами точки 1 и точки 2 с учетом их поворота.
задан 18 дек 2017 в 9:34
Случайно не это нужно: Vector3.Distance (или Vector2.Distance)?
var dist = Vector3.Distance(firstObject.position, secondObject.position);
DebugLog(dist);
ответ дан 18 дек 2017 в 9:59
Алексей ШиманскийАлексей Шиманский
72.2k11 золотых знаков87 серебряных знаков172 бронзовых знака
8
Решение данной задачи заключается в следующем
Vector3 vec = obj1.GetComponent().InverseTransformDirection(obj2.GetComponent().position) – obj1.GetComponent().position;
ответ дан 18 дек 2017 в 12:23
2
[ad_1]
unity get distance between two objects
// Vector3.Distance is the same as (a-b).magnitude float distance = Vector3.Distance(a.transform.position, b.transform.position);
how to compare distance between 2 objects unity
float distance = Vector3.Distance (object1.transform.position, object2.transform.position);
distance between two objects unity 2d
public GameObject object1; public GameObject object2; void Update() { Vector2 Pos1 = object1.transform.position; Vector2 Pos2 = object2.transform.position; float x1 = Pos1.x, x2 = Pos2.x, y1 = Pos1.y, y2 = Pos2.y; // Distance between X coordinates float xDif = Mathf.Abs((Mathf.Max(x1,x2) - Mathf.Min(x1,x2)); // Distance between Y coordinates float xDif = Mathf.Abs((Mathf.Max(y1,y2) - Mathf.Min(y1,y2)); // Pythagorean theorem float finalDistance = Mathf.Sqrt(xDif * xDif + yDif * yDif); Debug.Log("Distance Between Object1 And Object2 Is " + finalDistance); }
[ad_2]