MawaLog

一日一日、楽しく生きる。技術と音楽が好き。

開発日誌::Unity::UnitRxの勉強を始める

C# To Go

C# To Go

コメント

HoloLensの初プロジェクトでとりあえず、シンプルなシューティングゲームを作っている最中で、コルーチン便利だなと思っている一方で、なんかこのコルーチンが肥大化したらなんかすっごい行数のコードになりはしないか・・・と一抹の不安。  あと、倒した敵の数に応じた点数計算などで、今まではPublic static 変数で他のスクリプトから参照できるようにしておいて、UI表示していたのだが、中規模以上のゲームで衝突判定の対象タグとか色々なタイミングに応じた処理が増えそうだなと感じており、これもちょっと不安。。。
そこでよりよい方法がないかなとネット上で探してみるとUniRxという手法を発見、勉強を開始してみた。学習コスト高めらしいのでどこまで行けるか不明だけど、とりあえずのチャレンジ。

教材、参考資料

は、こちらで勉強しました。大変参考になりました、ありがとうございます!

www.slideshare.net

qiita.com

自分用ノート覚え書き

自分用にとりあえず備忘録・整理のためノートにとっただけなので書き損じ、不確実な部分ある可能性あります。

UnitRxの基本方針 Django/Pythonと比較して把握

イベント(Unityのイベント(マウスクリックとか))

↓
ストリームという形式に変換

(Djangoで考えるとQuerysetオブジェクトにすると
いうような感じのイメージ(多分))
(コードでいうとIObservable<T>が実体となる。
あとストリーム≈イベントメッセージ+イベントメッセージ+・・・+イベントメッセージ
というイメージで捉えるとよさそう)

↓
条件にそってストリームを操作

(Djangoで考えるとQuerysetのメソッド
.order_by()とか
filter(category=1))とかに相当)
(条件はラムダ式で指定 
ラムダ式 x => (xを含めた条件式))

↓
ストリームをつかって何するか書く

(Subscribeってのを使う)
(Awake()かStart()に実装するのがオススメ 
 Update()は危険) 

【ストリーム変換】

.AsObservable() 
//イベントをストリームに変換  
.OnClickAsObservable() 
//uGUI用ストリームに変換  

[ストリーム操作(オペレーター)]

◆(クリックなどのイベント)回数をカウント  
.Skip(3) //3回後に動作  
.Buffer(3) 
//3個イベントメッセージが貯まったら動作  
  
  
◆条件を満たすストリームかどうかでフィルタリング  
.Where(ラムダ式の条件) 
//条件がTrueなら動作(filter)  
.Zip(ラムダ式の条件) 
//複数の条件すべてがそろったら動作  
  
  
◆値を変換  
.Select(ラムダ式で変換指定) 
//値を変換する(map)  
  
  
◆リセットみたいな感じの機能  
.First() 
// ストリームに来た最初のメッセージのみ流す  
.ThrottleFirst 
// たくさんメッセージがあるとき
//最初のメッセージのみ流す  
.Repeat() 
// 動作後にZip内バッファをクリア再Subscribe  

【Subscribe(ストリームの最終出力操作)】

.Subscribe 
//ストリームの購読(Awake()かStart()に
//実装するのがオススメ Update()は危険)  
.SubscribeToText