void Start () { Observable.EveryUpdate() // update .Where(_ => Input.anyKeyDown) // .Select(_ => Input.inputString) // .Subscribe (x => { // OnKeyDown (x); // OnKeyDown c }).AddTo (this); // gameobject- } private void OnKeyDown (string keyCode) { switch (keyCode) { case "w": Debug.Log ("keyCode: W"); break; default: Debug.Log ("keyCode: "+keyCode); break; } }
Observable.Start (() => { // Observable thread int n = 100000000; int res = Fibonacci(n); // return res; // }).ObserveOnMainThread () // main thread- .Subscribe (xs => { // Debug.Log ("res: "+xs); // main thread- }).AddTo (this);
var request = ObservableWWW.Get("http://api.duckduckgo.com/?q=habrahabr&format=json") .Subscribe(x => { // Debug.Log ("res: "+x); // }, ex => { // Debug.Log ("error: "+ex); }); // request.Dispose ();
void Start () { Observable.WhenAll ( // WhenAll Observable Observable.FromCoroutine (AsyncA), // Observable Observable.FromCoroutine (AsyncB), Observable.FromCoroutine (AsyncC) ).Subscribe (_ => { // WhenAll Debug.Log ("end"); }).AddTo (this); } IEnumerator AsyncA () { Debug.Log("a start"); yield return new WaitForSeconds (1); Debug.Log("a end"); } IEnumerator AsyncB () { Debug.Log("b start"); yield return new WaitForFixedUpdate (); Debug.Log("b end"); } IEnumerator AsyncC () { Debug.Log("c start"); yield return new WaitForEndOfFrame (); Debug.Log("c end"); }
Observable.FromCoroutine (AsyncA) // AsyncA .SelectMany (AsyncB) // AsyncB AsyncA .SelectMany (AsyncC) // AsynC .Subscribe(_ => { Debug.Log ("end"); }).AddTo (this);
SceneManager.LoadSceneAsync ("HeavyScene") // .AsAsyncOperationObservable () // Observable .Do (x => { // Debug.Log ("progress: " + x.progress); // }).Subscribe (_ => { // Debug.Log ("loaded"); }).AddTo (this);
void Start () { SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer> (); Resources.LoadAsync<Sprite> ("sprite") // .AsAsyncOperationObservable () // Observable .Subscribe (xs => { // if (xs.asset != null) { // null Sprite sprite = xs.asset as Sprite; // asset sprite spriteRenderer.sprite = sprite; // sprite- } }).AddTo (this); }
void Start () { Observable.Timer (System.TimeSpan.FromSeconds (3)) // timer Observable .Subscribe (_ => { // Debug.Log (" 3 "); }).AddTo (disposables); // disposable Observable.Timer (System.TimeSpan.FromSeconds (1)) // timer Observable .Repeat () // .Subscribe (_ => { // Debug.Log (" 1 "); }).AddTo (disposables); // disposable } void OnEnable () { // disposable disposables = new CompositeDisposable(); } void OnDisable () { // if (disposables != null) { disposables.Dispose (); } }
public class MessageBase { public MonoBehaviour sender {get; private set;} // MonoBehaviour public int id {get; private set;} // id public System.Object data {get; private set;} // public MessageBase (MonoBehaviour sender, int id, System.Object data) { this.sender = sender; this.id = id; this.data = data; } public static MessageBase Create (MonoBehaviour sender, int id, System.Object data) { return new MessageBase (sender, id, data); } }
public class ServiceShareData { public const int MSG_ATTACK = 1001; }
MessageBroker.Default .Publish (MessageBase.Create ( this, // sender MonoBehaviour ServiceShareData.MSG_ATTACK, // message id "attack!" // data System.Ojbect ));
public CompositeDisposable disposables; void OnEnable () { disposables = new CompositeDisposable(); MessageBroker.Default .Receive<MessageBase>() // MessageBase .Where(msg => msg.id == ServiceShareData.MSG_ATTACK)// message id .Subscribe(msg => { // string data = (string)msg.data; // // sender- Debug.Log ("sender:"+msg.sender.name+" receiver:"+name+" data:"+data); }).AddTo (disposables); } void OnDisable () { // if (disposables != null) { disposables.Dispose (); } }
public class SomeModel { public ReactiveProperty<int> count { get; private set; } public SomeModel () { count = new ReactiveProperty<int> (0); // ReactiveProperty c 0 } }
public class SomeView : MonoBehaviour { public Text someText; public Button someButton; public void RenderCount (int count) { // count someText.text = count.ToString (); } public void AnimateButton () { // someButton.transform .DOShakeScale (0.5F, 0.3F) // .OnComplete (() => { // someButton.transform.localScale = Vector3.one; }); } }
public class SomePresenter : MonoBehaviour { public SomeView someView; // view public SomeModel someModel = new SomeModel (); // model void Start () { someModel.count // ReactiveProperty count .ObserveEveryValueChanged (x => x.Value) // .Subscribe (xs => { // someView.RenderCount (xs); // }).AddTo (this); someView.someButton // .OnClickAsObservable () // Observable .Subscribe (_ => OnClick (someView.someButton.GetInstanceID ())) .AddTo (this); } private void OnClick (int buttonId) { if (buttonId == someView.someButton.GetInstanceID ()) { someModel.count.Value++; someView.AnimateButton (); } } }
Source: https://habr.com/ru/post/342660/
All Articles