2016-09-19 8 views
0

私のコードを使用してサイズリストオーダー:今LINQの

public GameObject[] Farms; 

Farms = GameObject.FindGameObjectsWithTag("Farm").OrderBy(x => Vector2.Distance(this.transform.position, x.transform.position)) 
                .ThenBy(x => x.transform.parent.gameObject.GetComponent<FoodSpawn>().FoodList.Count) 
                .ToArray(); 

私が持っているもの:
は、だから私のシーンは、長方形の床を持っています。 キューブは左に、立方体は右に、AI(プレイヤー)は中央に。
各キューブには7つの食品(メインキューブの子)が入っています。 キューブのタグはFarmです。
リストFoodListは、のリストで、各キューブに添付されているスクリプトでは、そのリストにはキューブ内の各フードが含まれています。

達成したいこと:
プレイヤーは、彼が行きたい食べ物で満たされたどのキューブを決定する必要があります。
しかし、彼はキューブへの距離と食べ物の量を考慮する必要があります。
したがって、プレイヤーは、最も近いファーム&が最も食べ物の多いファームがリストの最初の要素であるようにリストを注文する必要があります。

今すぐリストが距離順に並べられるので、最も近いキューブが最初の要素ですが、.ThenBy行(または何か間違っていること)をスキップします。

+1

あなたの入力は?あなたの出力は何ですか?代わりにあなたは何を期待しましたか? [MCVE]を入力してください。 – nvoigt

+5

距離によるコードの注文が先です。しかし、距離が等しい場合にのみ、それは食物の数によって分類されます。 – Johan

+0

ヨハンを見て、感謝しなかったことはそれを知っています。 – Simon

答えて

0

@Johanがコメントで述べたように、ThenByは、OrderBy節に2つのオブジェクトの間につなぎがある場合にのみ機能します。あなたの場合、両方のパラメータを考慮したいので、距離および食品の数。あなたはここで少しの数学をする必要があります。あなたはだから私は最初にそれがリストをソートすることに決め

GetComponentInParent<FoodSpawn>(); 
+0

abitに優先順位の部分の意味をもっと説明できますか? キューブとプレーヤーの間の距離を 'distanceForX'とすると思います。 そして、 'foodCountForX'では、各リストの食べ物の量は? – Simon

+0

はい。あなたは私を正しくした。距離と食糧量を同じように計算する。私は擬似コードを提供した。 –

+0

申し訳ありませんが、 'priorityOfDistance'と' priorityOfFoodCount'の意味を理解できていません。 – Simon

0

を使用することができます

OrderBy(x => (distanceForX * priorityOfDistance) + (foodCountForX * priorityOfFoodCount)) 

、代わりの

transform.parent.gameObject.GetComponent<FoodSpawn>(); 

:優先順位に応じて、各パラメータは以下のように何かを使用することができます持っています農場の距離。
私はまた、農場に食糧が入っているかどうかを確認するブールを与えました。
次に、プレーヤーはHasFoodブールが真である最も近いファームに行くことにします。

Farms = GameObject.FindGameObjectsWithTag("Farm").OrderBy(x => (Vector2.Distance(this.transform.position, x.transform.position))) 
               .ToArray(); 

ClosestFarm = Farms.First(x => x.GetComponentInParent<FoodSpawn>().HasFood == true);