Unity: расстояние между двумя игровыми объектами в виде сцены - PullRequest
0 голосов
/ 23 января 2020

Я новичок в Unity и, создавая интерфейс, я пытаюсь найти расстояние между двумя игровыми объектами. Я знаю, как это сделать в скрипте C # / javascript, однако я изо всех сил пытаюсь найти эту информацию в виде сцены. Любая клавиша, которую я мог нажать, перемещая объект, чтобы увидеть расстояние до его соседей?

Ответы [ 2 ]

3 голосов
/ 23 января 2020

В сценарии вы можете использовать Vector3.Distance между vector3, чтобы получить расстояние между двумя точками. Каждый gameObject имеет позицию, которая представлена ​​в Vector3.

Ниже приведен пример сценария, который показывает вам, как он работает. Вам просто нужно перетащить сценарий на игровой объект на вашей сцене и перетащить в инспекторе другой игровой объект на вашей сцене. Сценарий должен запускаться, даже если вы не находитесь в режиме воспроизведения из-за [ExecuteInEditMode]. Таким образом, вы увидите обновление distanceBetweenObjects в реальном времени, фактически не нажимая кнопку play.

using UnityEngine;

[ExecuteInEditMode]
public class DistanceBetweenTwoObjects : MonoBehaviour
{
    public GameObject obj;

    public float distanceBetweenObjects;


    private void Update()
    {
        distanceBetweenObjects = Vector3.Distance(transform.position, obj.transform.position);
        Debug.DrawLine(transform.position, obj.transform.position, Color.green);
    }

    private void OnDrawGizmos()
    {
        GUI.color = Color.black;
        Handles.Label(transform.position - (transform.position - 
        obj.transform.position)/2, distanceBetweenObjects.ToString());
    }
}

Метод OnDrawGizmos будет рисовать текст между двумя объектами, показывающий значение расстояния, чтобы сделать его более удобным для пользователя.

0 голосов
/ 23 января 2020

Для этого нет никаких встроенных функций, но довольно просто добавить такие показания на дисплей, используя [ExecuteinEditMode], что заставляет скрипты запускаться, даже когда игра не находится в режиме игры. Этот скрипт, например, должен считывать расстояния по разным осям и в итоге:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class EditorDistanceDisplay : MonoBehaviour
{

    public GameObject target1;
    public GameObject target2;
    public float distanceX;
    public float distanceY;
    public float distanceZ;
    public float distanceTotal;

    void Start()
    {

    }

    void Update()
    {
        Vector3 delta = target2.transform.position - target1.transform.position;
        distanceX = delta.x;
        distanceY = delta.y;
        distanceZ = delta.z;
        distanceTotal = delta.magnitude;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...