Skip to content

Instantly share code, notes, and snippets.

@lotz84
Last active August 29, 2015 14:23
Show Gist options
  • Save lotz84/6a24ce2480dca123f880 to your computer and use it in GitHub Desktop.
Save lotz84/6a24ce2480dca123f880 to your computer and use it in GitHub Desktop.

#UniRX FRPのUnity実装

Haddock のようなものはないのでコードを直接読むのがいい

##Example

using System;
using UniRx;
using UnityEngine;
 
public class Intro : MonoBehaviour
{
    void Start()
    {
        // 左クリックのストリーム
        var clickStream = Observable.EveryUpdate()
            .Where(_ => Input.GetMouseButtonDown(0));
 
        // Buffer:250ミリ秒以内に連続してクリックされたものをまとめる
        clickStream.Buffer(clickStream.Throttle(TimeSpan.FromMilliseconds(250)))
            .Select(xs => xs.Count) // 250ミリ秒以内検出したクリック数
            .Where(x => x >= 2) // 2個以上のみにフィルタ
            .Subscribe(_ => Debug.Log("ダブルクリックされた!")); // foreachみたいな
    }
}

このスクリプト(Intro.cs)をMainCameraでもなんでも適当な何かに貼り付けてもらえれば、画面のどこでもダブルクリックされればログに流れます。

出典: A Beginners Guide to Reactive Extensions with UniRx

##Observable ###モナド

Return return in Haskell
SelectMany flatMap in Haskell

###リストっぽいメソッド

Where filter in Haskell
Select map in Haskell
Concat concat in Haskell
First head in Haskell
Take take in Haskell
Skip drop in Haskell
TakeWhile takeWhile in Haskell
SkilWhile dropWhile in Haskell
Zip zip in Haskell

###その他のメソッド

TakeUntil 指定したストリームにメッセージが来るまで〜
SkilUntil 指定したストリームにメッセージが来てから〜
Repeat StreamがOnCompletedで終了した時にもう一度Subscribeを行う
Timer/TimerFrame 一定期間後に実行
Interval/IntervalFrame 一定期間ごとに実行
Delay/DelayFrame 一定期間メッセージの伝達を遅延させる
Throttle/ThrottleFrame 落ち着いた時に最後のメッセージを流す
DistinctUntilChanged メッセージが変化した時のみ通知する

出典: 未来のプログラミング技術をUnityで -UniRx-

##uGUI

##WWW ObservableWWW.Get("https://example.com/")

##Coroutine

##LINQ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment