【问题标题】:How to find second closest object in array in unity? [duplicate]如何统一找到数组中第二近的对象? [复制]
【发布时间】:2022-01-16 06:12:03
【问题描述】:

我在 Unity 中遇到问题。我想创建一个脚本,它能够找到离玩家最近的物体(我设法做到了)和离玩家第二近的物体。我的问题是如何修改此代码使其也适用于第二个对象?

public class Robot2 : MonoBehaviour
{
    public GameObject cameraHolder;
    public Transform[] objects;
    private Transform nearestObj;
    private Transform secondObj;
    void Update()
    {
        float lowestDist = Mathf.Infinity;
        nearestObj = null;
        secondObj = null;
    
        foreach(Transform obj in objects)
        {
            float dist = Vector3.Distance(transform.position, obj.position);
            if(dist < lowestDist)
            {
                lowestDist = dist;
                nearestObj = obj;
            }
        } 
        Debug.DrawLine(transform.position, nearestObj.transform.position, Color.red); 
        cameraHolder.transform.position = nearestObj.transform.position;
    }
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以像下面的代码一样使用 LINQ:

    Objects.ToList().OrderBy(o => Vector3.Distance(transform.position, o.position))[1]
    

    Objects.ToList().OrderByDescending(o => Vector3.Distance(transform.position, o.position))[1]
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      float lowestDistance = Mathf.Infinity;
      float nextLowestDistance = Mathf.Infinity;
      nearestObject = null;
      secondObject = null;
      
      foreach ( Transform object in objects )
      {
          float dist = Vector3.Distance( object.position, transform.position );
          if ( dist < lowestDistance )
          {
              if ( lowestDistance < nextLowestDistance )
              {
                  nextLowestDistance = lowestDistance;
                  secondObject = nearestObject;
              }
              lowestDistance = dist;
              nearestObject = object;
          }
          else if ( dist < nextLowestDistance )
          {
             nextLowestDistance = dist;
             secondObject = object;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-24
        • 2019-05-12
        • 2014-02-20
        • 2018-09-22
        • 2020-07-09
        • 2021-06-18
        相关资源
        最近更新 更多