Unity でオブジェクトをドラッグして移動させる using UniRx

やりたいこと:タイトルのまま

最近話題のUniRxを使ってみました.

using UniRx;
using UniRX.Triggers;
using UnityEngine;

public class DraggedObject : MonoBehaviour
{
    void Start()
    {
         this.OnMouseDragAsObservable()
            .TakeUntilDestroy(this)                      // このオブジェクトが破壊されるまで
            .Select(_ => Input.mousePosition)
            .Select(pos =>
            {
                pos.z = this.transform.position.z;
                return Camera.main.ScreenToWorldPoint(pos);
            })
            .Select(pos => new Vector3(pos.x, pos.y, this.transform.position.z))
            .Subscribe(pos => this.transform.position = pos);
    }
}

これだけで,左クリックからのドラッグが書ける! すごい! ただ,OnMouseDragAsObservable は,右クリックからのドラッグには反応しませんでした.

というわけで,右クリック判定のメモ(右クリックのみ)

this.UpdateAsObservable()
    .Where(_ => Input.GetMouseButtonDown(1))    // 右クリックの時
    .Select(_ => Camera.main.ScreenPointToRay(Input.mousePosition))
    .Select(x =>
    {
         RaycastHit rh;
         var hit = Physics.Raycast(x, out rh);   // オブジェクトへの当たり判定
         return Tuple.Create(hit, rh);
    })
    .Where(x => x.Item1 && x.Item2.collider.gameObject == this.gameObject) // 当たったか,また,あたった対象がこのオブジェクトか
    .Subscribe(_ => Debug.Log("Right!!"));