2016-12-28 5 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#、 'Transform GetClosestCube(Transform [] cubes)'メソッドを宣言しようとしました。それは不可能です(ここでは意味をなさない)。 –

+0

@ Jip1912:リンクのコードは、質問に貼り付けられたコード とは異なります。 – apocalypse

答えて

0

Unity Frameworkを使用してプログラムしたことがないので、私はおそらくここに投稿するべきではないでしょう。私はこれが有効な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; 
     } 

もっと正確に見えます。このメソッドは、最も近いキューブを取得しようとしています。つまり、あなたはそれが無効になる(または何も返されない)ことを望みません。あなたは、あなたのメソッドがあなたが配列で送信したキューブの1つ、好ましくは最も近いものを返すようにします。そのため、戻り型のTransform(キューブなので)があります。

私はこのメソッドをキューブと関係のあるクラスに含めたいと思うでしょう。

これは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:名前 'キューブ 'は現在のコンテキストに存在しません – Jip1912

関連する問題