強火で進め

このブログではプログラム関連の記事を中心に書いてます。

「UnityのためのC#勉強会」に行って来ました

募集ページ

  • 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入門

  • LINQぐぐるとアイドルの方が上にでる
  • LINQについてツイートするとアイドルのファンの方からフォローされる
  • LINQ知名度を上げていきたい

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#プログラムの効率的な書き方】

【省エネ対応】 C#プログラムの効率的な書き方

【省エネ対応】 C#プログラムの効率的な書き方

■オススメツール
ちょっと高いけど 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

Rx入門
http://blog.xin9le.net/

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 にして使う予定のコードの中では使える

コード生成

反省:コード増えすぎる

  • JSON化、全て静的コード生成

まぁ、ゲームは画像が多いのでコードの増加は全体からみると微々たるもの

  • 一方、利点も有って
    • ソースコードが目に見えるので問題を見つけやすい
    • JSON読み書きに問題があった時にブレイクポイント仕掛けられる

生成方法はエディタ拡張。ソースコードを右クリック→コード生成を選択

〜.cs から 〜.g.cs というファイル名でコード生成

関連情報

Unity のための C# 勉強会 セッション資料 | grabacr.nét
http://grabacr.net/archives/4711