【问题标题】:Unity: Distance between two game-objects in the scene viewunity:场景视图中两个游戏对象之间的距离
【发布时间】:2020-01-23 18:07:25
【问题描述】:

我是 Unity 新手,在创建界面时,我试图找出两个游戏对象之间的距离。我知道如何在 C#/javascript 脚本中执行操作,但是我正在努力在场景视图中找到这些信息。移动物体时我可以按什么键来查看到它的邻居的距离?

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    在脚本中,您可以在vector3 之间使用Vector3.Distance 来获取两点之间的距离。每个游戏对象都有一个用 Vector3 表示的位置。

    下面是一个脚本示例,向您展示了它是如何工作的。您只需将脚本拖到场景中的游戏对象上,然后将场景中的另一个游戏对象拖入检查器。由于 [ExecuteInEditMode],即使您不在播放模式下,该脚本也应该运行。这样您将看到 distanceBetweenObjects 实时更新,而无需实际点击播放。

    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 方法将在 2 个对象之间绘制显示距离值的文本,以帮助使其更加用户友好。

    【讨论】:

      【解决方案2】:

      没有任何内置功能,但使用 [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;
          }
      }
      

      【讨论】:

      • 它比 .Distance 性能更高
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      相关资源
      最近更新 更多