Unityというよりは、C#に「LINQ」と呼ばれる便利な機能があります。 SQLのクエリ式のような記述でデータの加工ができるものらしいのですが、全くわからにので少し調べてみました。
LINQ
とりあえず色々と調べた所、このサイトが1番わかりやすかったです。
具体的な使用例 1
配列の中から1番大きい数字を取り出す場合は、以下のように記述をします。 [c] float[] x = {1,2,3,4,5,6,7,8,9} ; var hoge = x.Select(s => s).Max(); Debug.Log("最大値:" + hoge); // 9が取り出される [/c]
このコードの中でLINQに当たるのが[Select]と[Max()]です。
- Select : 条件に応じた値を選ぶ
- Max() : 最大値を返す
具体的な使用例 2
Scene内の特定のタグのオブジェクトからTransform.positionを取り出す。 [c] var transforms = GameObject.FindGameObjectsWithTag("Hoge").Select(go => go.transform.position).ToArray(); foreach(Vector3 hogeInt in transforms){
Debug.Log("position x: " +hogeInt.x + " y: " + hogeInt.y + " z: " + hogeInt.z);
}
[/c]
このコードの中でLINQに当たるのが[Select]と[ToArray()]です。
- Select : 条件に応じた値を選ぶ
- Max() : 条件に応じた値の配列を返す
具体的な使用例 3
配列の値で、奇数かつ最小値を取り出す。 [c] var hoge = x.Where(s =>s%2==1).Min(); Debug.Log("奇数の最小値 : " + hoge); [/c] このコードの中でLINQに当たるのが[Where]と[Min()]です。
- Where : bool型の条件にあった値を選択(trueの場合)
- Min() : 最小値の値を返す
具体的な使用例 4
重複の削除 Distinct()
配列の重複を失くす場合は[Distinct()]を利用します。 [c] var array = new[]{9,2,5,2,2,9,2,19} ; var hoge = array.Where(s => s%2==1).Distinct(); foreach(var hogeInt in hoge){
Debug.Log("奇数 : " + hogeInt);
} [/c]
最後に
今回はLINQのさわりだけをブログに書いたのですが、その他色々なことができます。 現状、私は全然理解がないのですが、使っていく毎に便利になっていくのではないでしょうか。 ただ、Unityで利用する際には色々と大変なことがあるみたいですので、注意をしないといけませんね。
C#に関してはC++と比べ違う部分が多い感じがするので、どんなことがまず出来るのかを勉強していきたいです。
Unity5 3Dゲーム開発講座 ユニティちゃんで作る本格アクションゲーム (Smart Game Developer) まつだす,BATA,㊥Maruchu,うにたじゃむお,栗坂こなべ,森理 麟,alwei 翔泳社 売り上げランキング : 11808 Amazonで詳しく見る |