2017-06-18 4 views
0

私はUnity3Dを使用しています。C#コード行の一部を変数に変更する

私は、クリーチャーの特定の値に基づいてリストをソートするスクリプトを持っています。

たとえば、生き物には、どれくらいの食べ物を食べたか、現在のカロリーの量はどれくらいか、どれくらいの大きさかという変数があります。

ボタンをクリックして値のソート方法を変更できるようにします。私は、自動的にソートタイプが何であるかの名前の変数を見つけることが

entrySortedText.text = creatureData.sortType.ToString(); 

ような何かをできるようにしたい、そのような

if(sortType == "calories") { 
    entrySortedText.text = creatureData.calories.ToString(); 
} else if(sortType == "food eaten") { 
    entrySortedText.text = creatureData.foodEaten.ToString(); 
} 

ように、しかしif文山積みにしたくありませんcreatureData内にあります。しかし、明らかにこれはうまくいきません。なぜなら、生物データに変数 "sortType"がないからです。しかし、sortTypeが自動的に "calories"や "food eaten"のような変数名に置き換えられます。

誰かがコード行の一部を変数の値に変更する方法を知っていますか?あるいは、if文の束を使うだけですか?

ありがとうございました。あなたの応答は非常に重要です。

P.S.ここで

は、現在のソートコードです:

public void LoadList() { 
    foreach(Transform child in transform) { 
     GameObject.Destroy(child.gameObject); 
    } 

    List<GameObject> creatures = new List<GameObject>(GameObject.FindGameObjectsWithTag("Creature").ToList()); 

    // Sort list based on calories 
    creatures.Sort(
     delegate(GameObject i1, GameObject i2) { 
      return i2.GetComponent<CreatureData>().calories.CompareTo(i1.GetComponent<CreatureData>().calories); 
     } 
    ); 

    foreach(GameObject creature in creatures) { 
     GameObject entry = Instantiate(entryPrefab); 
     entry.transform.SetParent(transform, false); 
     entry.transform.GetChild(0).GetComponent<Text>().text = creature.GetComponent<CreatureData>().creatureName; 
     entry.transform.GetChild(1).GetComponent<Text>().text = creature.GetComponent<CreatureData>().calories.ToString(); 
     entry.GetComponent<CreatureListEntryButton>().targetCreature = creature; 
    } 
} 
+0

。 – SLaks

+1

しかし、投稿したコードにソートコードは表示されません。これはソートされません: 'creatureData.calories.ToString();' – CodingYoshi

答えて

0

ですから、プロパティでソートしたいが、そのプロパティは、実行時に決定されます。 itemsという名前のコレクションがあり、そのアイテムの属性がCaloriesであるとします。そして、あなたはこれを行うことができます。

var sortBy = "Calories"; 
var propertyInfo = typeof(YourObject).GetProperty(sortBy); 

は、その後、あなたはその上で並べ替えることができます:あなたはおそらく辞書を探している

var orderByCalories = items.OrderBy(x => propertyInfo.GetValue(x, null)); 
+0

実行時に設定したくない場合はどうすればいいですか? – RugbugRedfern

+0

@rugbugreddern [OK]をクリックします。あなたはいつそれを設定したいですか?ある時点で決定を下す必要があります。コンパイルまたは実行時。その他の選択肢は何ですか? – CodingYoshi

+0

@rugbugredfern上記のコメントをご覧ください。申し訳ありませんがあなたの名前のスペルミス。 – CodingYoshi

関連する問題