spo*_*r94 1 c# unity-game-engine system.reactive
最近正在与Rx合作,我在合并两个可观察对象并试图从它们发出命令时遇到了麻烦.
我有两个observable,所以我想从它们发出一个命令,只有当那些observable为真时,命令才能执行.这是我的代码:
BuyCommand = playerData.Gold.Select(x => x >= boosterStoreItem.price)
.Merge(inventoryItem.CanAddItem.Select(x => x))
.ToReactiveCommand();
Run Code Online (Sandbox Code Playgroud)
那么这段代码有点工作,但问题是,我有多个BuyCommands(它们之间没有共享任何可观察对象),如果任何CanAddItem改变状态,所有BuyCommands CanExecute都变为true.
我相信我在合并时犯了一个错误,应该以其他方式完成.那我该怎么办呢?
请注意,它是UniRx(统一的Rx),但它们几乎相同.
以下应该有效:
BuyCommand = playerData.Gold.Select(x => x >= boosterStoreItem.price)
.CombineLatest(inventoryItem.CanAddItem.Select(x => x), (x,y) => x && y)
.ToReactiveCommand();
Run Code Online (Sandbox Code Playgroud)
CombineLatest组合两个流并在每个序列发布一个值时发布一个值.发布的值基于keySelector参数的结果,该参数在示例中为(x,y) => x && y.这意味着只有两个流结果都为真时结果才为真.