募集ページ
- 2015/03/21(土)開催
UnityのためのC#勉強会 - 日本Androidの会 Unity部 | Doorkeeper
https://unity-bu.doorkeeper.jp/events/21814
Togetterまとめ
UnityのためのC#勉強会 - Togetterまとめ
http://togetter.com/li/797844
Unityでもう少しC#を書きたい人のためのLINQ入門
- 森理 麟 様
- ゲームプログラマです。C#が好きです。「Unity5 3Dゲーム開発講座」を共著で書きました。「VSハッカソン倶楽部」の主催。Microsoft MVP for Visual .NET
Unity 5 では Visual Studio Tools for Unity の package が読み込めなく成っている。
【対処法】
メニューから Asset > Import Package > Custom Package と選択し、
C:\Program Files(x86)\Microfost Visual Stuido Tools for Unity\2013 の Visual Studio 2013 Tools.unitypackage を選択。
データは取ってくるだけで何もしない LINQ は実体化するまでは実行されない。
【コードによる実例】
var selObj = objs.Where(… foreach(var obj in selObj) {
objs.Where の時点では実体化されていない(※)。 foreach の所で実体化される。
※ブレークポイントを置いてチェックしてもデータは存在しない
効率化のポイントの1つ目は、 LINQ はループを隠蔽しているが中でグルグル回る。その回数を少しでも減らすこと。
if (datas->Count(...) > 0)
と
if (datas->Any(...))
ではループする回数が全然違ってくる
※ Count は全体をチェックする必要が有る。 Any は1つ見つかると確定。
Where はなるべく早く
iOS は AOT 関連で LINQ のトラップがある。 nueucc さんのブログや UniLinq が有るよ。
【参考】
やっぱりUnityでもC#なんだからLINQが使いたい! - Qiita
http://qiita.com/RyotaMurohoshi/items/d3a2068f1ad787325ec0
■オススメ書籍
どうだろう?と言っている人も居るけどマニアックな内容あり
【C#プログラムの効率的な書き方】
- 作者: 川俣晶
- 出版社/メーカー: 技術評論社
- 発売日: 2012/01/19
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 9回
- この商品を含むブログ (4件) を見る
■オススメツール
ちょっと高いけど ReShaper 。リアルタイム赤ペン先生の様にリアルタイムに指摘してくれるツール。$149
ReSharper :: The Most Intelligent Extension for Visual Studio
https://www.jetbrains.com/resharper/
UniRx とか Reactive Property とか
【スライド】
- ぐらばく (@Grabacr07)様
グラニ CTOは UniRx の作者(@neuecc)。 C# 押しな会社
イベントを時間軸に乗ったシーケンスとみなす
DevLabs で2009年に公開されたプロジェクト
多くの言語に移植されている
RxJS/bacon.js/RxJava/RxScala/ReactiveCocoa/Rx.rb他...
UniRx
弊社(グラニ) CTO @neuecc が Unity 向けに移植した Rx
neuecc/UniRx
https://github.com/neuecc/UniRx
言語は違っても概念は同じ
知識は他に移植されたライブラリでも活用できる
日本語のドキュメントは少ない(ちらほらは出始めてる)
おすすめ資料
Reactive Programming by UniRx for Asynchronous & Event Processing
http://www.slideshare.net/neuecc/reactive-programming-by-unirxfor-asynchronous-event-processing
未来のプログラミング技術をUnityで -UniRx-
http://www.slideshare.net/torisoup/unity-unirx
ReactiveX
http://reactivex.io/
Reactive extensions入門v0.1
http://www.slideshare.net/okazuki0130/reactive-extensionsv01
OnValueChangeAsObservable() と onValueChange.AsObservable() は一見、同じ動作をする様に思えるが実際は違うので注意
onValueChange.AsObservable() の場合には最初の値(初期値)のタイミングではイベントが発生しない。
Orange Cube 自社フレームワーク
【スライド】
- 岩永 信之 様
- オレンジキューブCTO。++C++;の中の人。
- いつもはC#でググれで済んでますが今回は会社の紹介も
「エンド・ユーザーは、0.5秒のフリーズでストレスを感じ、3秒のフリーズはバグだと思う」という記事を書いたらバズりました。
特集:.NET開発者のための非同期入門:フリーズしないアプリケーションの作り方 (1/3) - @IT
http://www.atmarkit.co.jp/ait/articles/1109/30/news126.html
フリーズしないアプリケーションの作り方 | ++C++; // 未確認飛行 C ブログ
https://ufcpp.wordpress.com/2011/09/30/%E3%83%95%E3%83%AA%E3%83%BC%E3%82%BA%E3%81%97%E3%81%AA%E3%81%84%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9/
Objectのものは内部処理都合。型が有る方は人間向け
C# 6.0の新機能: string.Format("{0}", hoge); と書いていた部分を $"aaa:{hoge}"; ( hoge は変数) という書き方が出来る。しかし、これは Unity の IDE を開いた時の自動ビルドではエラーとなる
これについては DLL 化して回避。 DLL にして使う予定のコードの中では使える
関連情報
Unity のための C# 勉強会 セッション資料 | grabacr.nét
http://grabacr.net/archives/4711