可观察的生命周期管理 - 如何从输入轴创建数据流?

时间:2016-11-21 09:55:59

标签: unity3d reactive-programming reactive

Unity 5.4.3f1。

我正在学习使用UniRx定位Unity的反应式编程。 我正试图从输入轴创建一个简单的数据流。

   public IObservable<float> Movement;

void Start () 
{
    this.Movement = Observable.EveryUpdate()
                    .Select(_ => Input.GetAxis("Horizontal") )
                    .Subscribe(f => Debug.Log(f))
                    .AddTo(this);
}

我收到此错误:

Error CS0266: Cannot implicitly convert type `System.IDisposable' to `UniRx.IObservable<float>'. An explicit conversion exists (are you missing a cast?) (CS0266) (Assembly-CSharp)

UniRx的例子编译得很好。

    Observable.IntervalFrame(30).Subscribe(x => Debug.Log(x)).AddTo(this);

我认为两者之间没有太大区别。我错过了什么?

1 个答案:

答案 0 :(得分:2)

嗯,我很蠢。创建可观察和订阅应该是两件不同的事情。代码在单独编写时编译良好。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Add case</title>
<script type="text/javascript">
        function replaceSeperator() {
            var incident_box = document.getElementById("TextBoxIncidentID")
            var content = incident_box.value;
            //incident_box.innerHTML = content.replace(/\n/g, ",");
            var ctt = content.replace(/\n/g, ",");
            var lastchar = ctt.substr(ctt.length - 1);
            if (lastchar != ",") {
                incident_box.value = ctt;
            } else {
                incident_box.value = ctt.substr(0,ctt.length - 1);
            }
        }
    </script>
</head>
<body>
	<textarea name="TextBoxIncidentID" rows="2" cols="20" id="TextBoxIncidentID" textwrapping="Wrap" acceptreturn="true" onmouseout="replaceSeperator()" style="font-family:Calibri;font-size:Medium;height:60px;width:430px;margin-top: 5px;"></textarea>
</body>
</html>