2017-05-25 38 views
0

我有此脚本查找当前最接近的立方体:Unity3d C# - 寻找第二最接近的立方体

GameObject FindClosestCube() { 

    GameObject[] gos; 
    gos = GameObject.FindGameObjectsWithTag("cube"); 
    GameObject closest = null; 
    float distance = Mathf.Infinity; 
    float position = transform.position.z; 
    foreach (GameObject go in gos) { 
     float diff = go.transform.position.z - position; 

     float curDistance = diff; 
     if (curDistance < distance) { 
      closest = go; 
      distance = curDistance; 
     } 
    } 
    return closest; 
} 

现在我想获得第二近的立方体,所以最接近的立方体后最接近的立方体(Z-轴)。我尝试了几件事,但他们没有工作,所以有人可以解释我如何实现这一目标?谢谢。

+0

任何人的想法? – Jip1912

回答

2

在分配一个新的最接近之前,分配最接近第二个最接近的当前值。 然后返回一个游戏对象数组,第一个元素是最接近的。

GameObject[] FindClosestCubes() { 
    GameObject[] gos; 
    gos = GameObject.FindGameObjectsWithTag("cube"); 
    GameObject closest = null; 
    GameObject secondClosest = null; 
    float distance = Mathf.Infinity; 
    float position = transform.position.z; 
    foreach (GameObject go in gos) { 
     float diff = go.transform.position.z - position; 

     float curDistance = diff; 
     if (curDistance < distance) { 
      secondClosest = closest; 
      closest = go; 
      distance = curDistance; 
     } 
    } 
    return new GameObject[] { closest, secondClosest }; 
} 
+0

谢谢,但我得到这些错误:https://i.gyazo.com/b220c8d05abf69b83e57bdc8952e7619.png,我从来没有一条线similair为“”游戏对象[] {最近,secondClosest};”所以我不知道如何。修复它 – Jip1912

+0

@ Jip1912对不起忘了在返回的** **新关键字我已经编辑我的答案 – Iggy

+0

感谢,但现在我得到这个错误:无法隐式转换类型'UnityEngine.GameObject []”到'UnityEngine.GameObject” – Jip1912