unityで関数型言語ぽく書く 如法会#1
TRANSCRIPT
Unityで関数型言語ぽく書く@csc_kamera25 如法会#1
2
● 広島Unity勉強会 の中の人● フリーTPSとか作ってます(@CrowSullCore)
● Twitter : @csc_kamera25● Github : kamera25● ブログ : http://religion.indiesj.com/
自己紹介
UniRx - https://github.com/neuecc/UniRx
何が出来る?
・リアクティブプログラミング(Reactive Extensions)がUnityでできる。
・最近のプログラミングパラダイムらしい。
・フレームごとの処理をあらかじめ宣言しておく。
・Update()にそれぞれの変数をみて、処理をするように書かない。
・コルーチンの延長のような感じ。
using UnityEngine;using UniRx;
~以下、コード~
using で読み込み
public class Counter : MonoBehaviour{ void Awake () { IObservable<long> updateStream = Observable.EveryUpdate(); updateStream.Subscribe (count => Debug.Log (count)); }}
public class Counter : MonoBehaviour{ int count = 0; void Update () {
Debug.Log( ++0); }}
=
ノーマルな書き方
UniRxな書き方
Awake()この関数は常に Start 関数の前およびプレハブのインスタンス化直後に呼び出されます。
Update()Updateはフレームごとに一度呼び出されます。これは、フレームのアップデートのメインとなる関数です。
繰り返し
Rxでは、初期にふるまいを記入する。
public class Counter : MonoBehaviour{ void Awake () { IObservable<long> updateStream = Observable.EveryUpdate(); updateStream.Subscribe (count => Debug.Log (count)); }}
毎フレーム監視するぞ。
updateStream
public class Counter : MonoBehaviour{ void Awake () { IObservable<long> updateStream = Observable.EveryUpdate(); updateStream.Subscribe (count => Debug.Log (count)); }}
0count <long>
Debug.log()
フレームが来た
①
②
OnNext()③
1
public class Click: MonoBehaviour{ void Awake () { IObservable<long> clickStream = Observable .EveryUpdate() .Where (_ => Input.GetMouseButtonDown (0));
clickStream.Subscribe (_ => Debug.Log ("Clicked!")); }}
Where()によって、実行の条件をつける。
フレームが来た Where()右クリックが押されてる?
①
②
Debug.log()
参考&引用
・「UniRxを使ってみた。マウスクリックの回数を数える - RyotaMurohoshi」
http://qiita.com/RyotaMurohoshi/items/7e1509e03d8e3a1eae4f
・「Update()をObservableに変換する方法 - toRisouP」
http://qiita.com/toRisouP/items/972b97367df12c3457d2
ご静聴ありがとうございました。