[譯] ReactiveX 與 Unity3D <二.2>

原文鏈接

我想為這個系列之前的一篇文章做一些補充。此前我們添加了一個按住 Shift 可以奔跑的效果。有些游戲則是使用 Shift 鍵來切換走跑狀態(tài)的。通過我們的 Observable 控制器可以非常簡單的完成修改。

基于信號架構的一個好處是,我們可以只改變信號的產生,而不用修改響應信號的代碼。我們原來定義的 Run 信號是這樣的:

Run = this.UpdateAsObservable()
  .Select(_ => Input.GetButton("Fire3"))
  .ToReadOnlyReactiveProperty();

每一次 Update, 如果 Shift (“Fire3” 輸入軸)被按下 Run 就返回 true, 否則就返回 false。(僅僅是為了使用方便,我們將它轉化成了響應式屬性)

將其改變被按鍵切換狀態(tài)就像下面這樣簡單:

var runValue = false;
Run = this.UpdateAsObservable()
  .Where(_ => Input.GetButtonDown("Fire3"))
  .Do(_ => runValue = !runValue)
  .Select(_ => runValue)
  .ToReadOnlyReactiveProperty();

runValue 是使用了閉包特性的狀態(tài)。在每次 Shift 按鈕被按下的 Update, 我們將 runValue 取反并重新賦值。此處的 Do 方法不是必須要有的;我們完全可以將 Do 中的函數(shù)移到 Select 中執(zhí)行。然而 Do 明確指出有一些副作用正在發(fā)生。就像在這個例子中,狀態(tài)值被操縱了,這就可以作為你的程序員伙伴的警告標志(也包括未來的你)。

當然你必須要小心沒有其他地方會引用 runValue, 所以你可能希望通過將它隱藏在特定的函數(shù)中,來保護它。

最重要的是,除了那些負責生成運行信號的代碼,我們沒有改變任何其他任何一行代碼。那些沒有修改的代碼也依然能按照預期運行!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容