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));
}
}
0
count <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
ご静聴ありがとうございました。

Unityで関数型言語ぽく書く 如法会#1