Anzeige
Anzeige

Más contenido relacionado

Destacado(20)

Anzeige

Similar a LINQ in Unity(20)

Más de Yoshifumi Kawai(17)

Anzeige

LINQ in Unity

  1. @仕事 C# @個人活動 http://neue.cc/ @neuecchttps://github.com/neuecc/UniRx
  2. 神獄のヴァルハラゲート モンスタハンターロアオブカード http://gihyo.jp/dev/serial/01/grani/0001 http://grani.jp/recruit
  3. using
  4. Windows WinForms, WPF Mac Xamarin.Mac Windows Tablet Windows Store Application WebApplication ASP.NET MVC/Web API, OWIN Cloud Microsoft Azure, AWS C# Everywhere Game Unity, PlayStation Mobile SDK Mobile Xamarin.iOS Xamarin.Android Windows Phone 8 SDK Embedded Windows Embedded .NET Micro Framework NUI Kinect, LeapMotion
  5. Windows WinForms, WPF Mac Xamarin.Mac Windows Tablet Windows Store Application WebApplication ASP.NET MVC/WebAPI, OWIN Cloud Microsoft Azure, AWS C# Everywhere -Current Game Unity, PlayStation Mobile SDK Mobile Xamarin.iOS Xamarin.Android Windows Phone 8 SDK Embedded Windows Embedded .NET Micro Framework NUI Kinect, LeapMotion
  6. Windows WinForms, WPF Mac Xamarin.Mac Windows Tablet Windows Store Application WebApplication ASP.NET MVC/WebAPI, OWIN Cloud Microsoft Azure, AWS C# Everywhere-Future Game Unity, PlayStation Mobile SDK Mobile Xamarin.iOS Xamarin.Android Windows Phone 8 SDK Embedded Windows Embedded .NET Micro Framework NUI Kinect, LeapMotion
  7. サーバーもクライアントもC# 同一ソリューションファイルに格納 言語依存を強みに変える サーバーサイド(C#/ASP.NET)と クライアントサイド(Unity)でデータ共有
  8. Introduction to LINQ
  9. Java/Delphi Generics LINQ dynamic async 2002 C# 1.0 2005 C# 2.0 2008 C# 3.0 2010 C# 4.0 2012 C# 5.0 anonymous method yield return
  10. Java/Delphi Generics LINQ dynamic async 2002 C# 1.0 2005 C# 2.0 2008 C# 3.0 2010 C# 4.0 2012 C# 5.0 anonymous method yield return C# 4.0以降Unity非対応の壁 (本当にはよ対応して欲しい)
  11. LINQ...
  12. SQLみたいなもの?
  13. 似てる、半分正しい。 varquery = fromx insource wherex % 2 == 0 selectx * x;
  14. Language INtegrated Query Unityでの実用上の場合は
  15. // クエリ構文 varquery = fromx insource wherex % 2 == 0 selectx * x; // メソッド構文 varquery = source .Where(x => x % 2 == 0) .Select(x => x * x);
  16. // クエリ構文 varquery = fromx insource wherex % 2 == 0 selectx * x; // メソッド構文 varquery = source .Where(x => x % 2 == 0) .Select(x => x * x); メソッド構文のほうが機能が多い(使えるメソッド 数が多い)&ラムダ式に慣れれば書きやすいので、 基本的にはメソッド構文で書くのをお薦めします (IntelliSenseでメソッドチェーン楽しい!)
  17. // 列挙してフィルタリングして詰め直す varlist = newList<int>(); foreach(varitem insource) { if(item % 2 == 0) { list.Add(item); } } // 列挙してフィルタリングして詰め直す vararray = source.Where(x => x % 2 == 0).ToArray(); (source = IEnumerable<int>) ・LINQは一行で済む ・一時変数(List<T>)の宣言が不要 ・配列がカジュアルに使える
  18. フィルタして変形して詰め直しは頻出パターン (pythonでのリスト内包表記とかに相当) // 列挙してフィルタリングして詰め直す // + 日付を足したのを加える varlist = newList<DateTime>(); foreach(varitem insource) { if(item % 2 == 0) { list.Add(DateTime.Now.AddDays(item)); } } // 列挙してフィルタリングして詰め直す // + 日付を足したのを加える vararray = source.Where(x => x % 2 == 0) .Select(x => DateTime.Now.AddDays(x)) .ToArray();
  19. Takeの他にSkipとか条件つきの TakeWhile/SkipWhileなどもあるよ // 列挙してフィルタリングして詰め直す // + 日付を足したのを加える // を、4個分だけ取得する varlist = newList<DateTime>(); foreach(varitem insource) { if(item % 2 == 0) { list.Add(DateTime.Now.AddDays(item)); } if(list.Count == 4) break; } // 列挙してフィルタリングして詰め直す // + 日付を足したのを加える // を、4個分だけ取得する vararray = source.Where(x => x % 2 == 0) .Select(x => DateTime.Now.AddDays(x)) .Take(4) .ToArray();
  20. 値がかぶった時に別の値で比較する、というの もThenBy/ThenByDescendingでつなげるだけで 出来るのが普通のSortよりも強い // 列挙してフィルタリングして詰め直す // + 日付を足したのを加える // を、4個分だけ取得する // を、降順にソートする varlist = newList<DateTime>(); foreach(varitem insource) { if(item % 2 == 0) { list.Add(DateTime.Now.AddDays(item)); } if(list.Count == 4) break; } list.Sort((x, y) => -x.CompareTo(y)); // 列挙してフィルタリングして詰め直す // + 日付を足したのを加える // を、4個分だけ取得する // を、降順にソートする vararray = source.Where(x => x % 2 == 0) .Select(x => DateTime.Now.AddDays(x)) .Take(4) .OrderByDescending(x => x) .ToArray();
  21. foreachでいい? 機能が弱ければ弱いほどコードが意図を伝える 単機能だからこそ、見ただけで何をやっているのか分かる。 それに加えて短く書けるが故に書きやすいし、そのこと自 体が読みやすさにも寄与する
  22. 合成可能であるということ C#はIntelliSense指向言語 UnityもVisual Studioで書こう(少な くとも素エディタはやめよう)
  23. In Unity
  24. データソースを見つけよう Unityにおいて、例えば?
  25. // Unityで活かせるLINQの底力!! (後編)からの引用 // http://gamesonytablet.blogspot.jp/2013/01/unitylinq_24.html// ターゲットに最も近い順で、5つのタグつきオブジェクトのレンダラのマテリアルを取得する varmaterials = GameObject.FindGameObjectsWithTag("sometag") .Select(r => r.renderer) .Where(r => r != null) .OrderBy(r => (r.transform.position -transform.position).sqrMagnitude) .Take(5) .SelectMany(r => r.materials) .ToList(); 配列っぽいもの見つけたら、必ず何か使える。 LINQで考える事が習慣化されれば、LINQ firstで発想は浮かぶ。
  26. データソースを作り出す http://neue.cc/2014/11/11_482.html https://github.com/neuecc/LINQ-to-GameObject-for-Unity// 子孫方向の全ゲームオブジェクトのうちtagが"foobar"のオブジェクトを破壊 origin.Descendants().Where(x => x.tag == "foobar").Destroy(); // 自分を含む子ノードからBoxCollider2Dを抽出 varcolliders = origin.ChildrenAndSelf().OfComponent<BoxCollider2D>(); // 自分の真下にPrefabをCloneして追加 origin.Add(new[] { prefab, prefab, prefab });
  27. 死ぬin iOS http://neue.cc/2014/07/01_474.html だが使う https://www.assetstore.unity3d.com/jp/#!/content/18131
  28. Deep Dive LINQ
  29. 内部挙動気になる人へ http://www.slideshare.net/neuecc/an-internal-of-linq-to-objects-29200657 Topics
  30. IObservable<T> IEnumerable<T> (LINQ to Objects) DataSet XML IQueryable SQL Twitter
  31. IEnumerable<T> IObservable<T> (Reactive Extensions) UI (ReactiveProperty) OAuth (ReactiveOAuth) IQbservable<T> WMI
  32. 時間軸を基盤にしたLINQの新しい形 Pushスタイル、IObservable<T> time 間隔は不定期でも可 終わりがなくてもいい(無限に続く)
  33. DataSource (IEnumerable<T>) Action 値の要求(Pull) DataSource (IObservable<T>) Action 値の送信(Push)
  34. LINQ to Asynchronous/Events http://neue.cc/2014/08/23_476.htmlhttps://github.com/neuecc/UniRxhttp://u3d.as/content/7tT Reactive Game Architecture
  35. Binding, ReactiveStateMachine, etchttps://www.assetstore.unity3d.com/jp/#!/content/14381 メジャーライブラリとなる ことでより安心して使える よう前進
  36. Conclusion
  37. C#使うならLINQ使わなきゃmottainai ところで性能は?
Anzeige