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

Post on 23-Jan-2017

105 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

ご静聴ありがとうございました。

top related