2016-12-28 51 views
-3

我複製從代碼:https://forum.unity3d.com/threads/clean-est-way-to-find-nearest-object-of-many-c.44315/Unity C# - 如何修復此代碼?

但這代碼:

Transform GetClosestCube (Transform[] cubes); 

    void GetClosestCube() 
    { 
     { 
      Transform bestTarget = null; 
      float closestDistanceSqr = Mathf.Infinity; 
      Vector3 currentPosition = transform.position; 
      foreach(Transform potentialTarget in cubes) 
      { 
       Vector3 directionToTarget = potentialTarget.position - currentPosition; 
       float dSqrToTarget = directionToTarget.sqrMagnitude; 
       if(dSqrToTarget < closestDistanceSqr) 
       { 
        closestDistanceSqr = dSqrToTarget; 
        bestTarget = potentialTarget; 
       } 
      } 

      return bestTarget; 
     } 
    } 

它給人的錯誤:

Assets/Player.cs(29,12): error CS0501: `Player.GetClosestCube(Transform[])' must have a body because it is not marked abstract, extern, or partial

如果我用它究竟是如何在線程的代碼:

void GetClosestCube() 
    { 
     { 
      Transform GetClosestCube (Transform[] cubes) 
      { 
      Transform bestTarget = null; 
      float closestDistanceSqr = Mathf.Infinity; 
      Vector3 currentPosition = transform.position; 
      foreach(Transform potentialTarget in cubes) 
      { 
       Vector3 directionToTarget = potentialTarget.position - currentPosition; 
       float dSqrToTarget = directionToTarget.sqrMagnitude; 
       if(dSqrToTarget < closestDistanceSqr) 
       { 
        closestDistanceSqr = dSqrToTarget; 
        bestTarget = potentialTarget; 
       } 
      } 

      return bestTarget; 
     } 
     } 
    } 

Error: Assets/Player.cs(34,28): error CS1525: Unexpected symbol (', expecting ,', ;', or ='

+0

爲什麼downvotes?難道我做錯了什麼? – Jip1912

+0

我想你需要在複製代碼之前閱讀C#初學者書。該代碼是無效的C#,它試圖聲明一個方法'變換GetClosestCube(變換[]立方體]'_inside另一個方法''無效GetClosestCube()'。這是不可能的(這裏沒有任何意義)。您寧可要求代碼作者澄清, –

+0

@ Jip1912:鏈接中的代碼看起來不同於代碼 已粘貼到問題中。 – apocalypse

回答

0

從來沒有編程使用Unity框架,所以我可能不應該在這裏發佈,但哦。我同意雷內這看起來不像有效的C#代碼。

 Transform GetClosestCube (Transform[] cubes) 
     { 
      Transform bestTarget = null; 
      float closestDistanceSqr = Mathf.Infinity; 
      Vector3 currentPosition = transform.position; 
      foreach (Transform potentialTarget in cubes) 
      { 
       Vector3 directionToTarget = potentialTarget.position - currentPosition; 
       float dSqrToTarget = directionToTarget.sqrMagnitude; 
       if (dSqrToTarget < closestDistanceSqr) 
       { 
        closestDistanceSqr = dSqrToTarget; 
        bestTarget = potentialTarget; 
       } 
      } 

      return bestTarget; 
     } 

看起來對我更加正確。這種方法試圖獲得最近的立方體。這意味着你不希望它返回無效(或沒有)。您希望您的方法返回您在數組中發送的多維數據集中的一個,最好是最接近的。這就是爲什麼它有一個返回類型的轉換(因爲這是一個立方體)。

我想你會希望這個方法包含在一個與多維數據集有關的類中。

假設這是一個名爲ReadyPlayerOne(壞類名,好書)的類,方法工作是告訴你距離一個ReadyPlayerOne實例最近的立方體,你的代碼可能看起來像這樣。

public class ReadyPlayerOne { 
    Transform GetClosestCube (Transform[] cubes) 
    { 
     Transform bestTarget = null; 
     float closestDistanceSqr = Mathf.Infinity; 
     Vector3 currentPosition = transform.position; 
     foreach (Transform potentialTarget in cubes) 
     { 
      Vector3 directionToTarget = potentialTarget.position - currentPosition; 
      float dSqrToTarget = directionToTarget.sqrMagnitude; 
      if (dSqrToTarget < closestDistanceSqr) 
      { 
       closestDistanceSqr = dSqrToTarget; 
       bestTarget = potentialTarget; 
      } 
     } 

     return bestTarget; 
    } 
} 

然後你可以新建一個實例並像這樣調用它。

var playerone = new ReadyPlayerOne(); 
var closestCube = playerone.GetClosestCube(cubes); 

我希望這有助於:)

+0

但是我不能讓劇本陷入空虛? http://pastebin.com/sJbJvSqf 這給出了一個錯誤 – Jip1912

+0

你可以但你不會這樣構造它。 它會更像這個http://pastebin.com/0hCJQKSq – Woot

+0

然後我得到:(9,36):錯誤CS0103:在當前上下文中不存在名稱'cubes' – Jip1912