facebook twitter hatena line email

「Unity/R3/UniRxから移植」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(Observable.EveryUpdate()の返り値まわり対応)
 
(同じ利用者による、間の14版が非表示)
行1: 行1:
 +
==公式==
 +
変更メソッド名一覧
 +
 +
https://github.com/Cysharp/R3?tab=readme-ov-file#classmethod-name-changes-from-dotnetreactive-and-neueccunirx
 +
 
==using置換==
 
==using置換==
 
<pre>
 
<pre>
行13: 行18:
 
<pre>
 
<pre>
 
// UniRx
 
// UniRx
transform.ObserveEveryValueChanged(_ => _.Count).Subscribe(count => Debug.Log(count));
+
transform.ObserveEveryValueChanged(_ => _.Count).Subscribe(count => Debug.Log(count))
 +
    .AddTo(gameObject);
  
 
// R3
 
// R3
 +
CompositeDisposable disposable;
 +
disposable = new CompositeDisposable();
 
Observable.EveryValueChanged(transform, _ => _.Count)
 
Observable.EveryValueChanged(transform, _ => _.Count)
    .Subscribe(count => Debug.Log(count));
+
    .Subscribe(count => Debug.Log(count))
 +
    .AddTo(disposable);
 
</pre>
 
</pre>
  
 
参考:https://qiita.com/toRisouP/items/4344fbcba7b7e8d8ce16
 
参考:https://qiita.com/toRisouP/items/4344fbcba7b7e8d8ce16
  
==Observable.Createの置換==
+
==IObservableをObservableへ==
 +
===Collisionの置換の場合===
 +
<pre>
 +
// UniRx
 +
ObservableCollision2DTrigger landTrigger;
 +
IObservable<Collision2D> landOnCollisionEnterAsObservable = landTrigger.OnCollisionEnter2DAsObservable();
 +
 
 +
// R3
 +
ObservableCollision2DTrigger landTrigger;
 +
Observable<Collision2D> landOnCollisionEnterAsObservable = landTrigger.OnCollisionEnter2DAsObservable();
 +
</pre>
 +
 
 +
===Observable.Createの置換の場合===
 
<pre>
 
<pre>
 
// UniRx
 
// UniRx
行35: 行56:
 
             });
 
             });
 
</pre>
 
</pre>
==IObservableをObservableへ==
 
<pre>
 
// UniRx
 
ObservableCollision2DTrigger landTrigger;
 
IObservable<Collision2D> landOnCollisionEnterAsObservable = landTrigger.OnCollisionEnter2DAsObservable();
 
  
// R3
+
===ObservableEventTriggerを設置してる場合は===
ObservableCollision2DTrigger landTrigger;
+
InspectorにUnityEngineBridge/Triggers/ObservableEventTriggerを設置してる場合は、
Observable<Collision2D> landOnCollisionEnterAsObservable = landTrigger.OnCollisionEnter2DAsObservable();
+
R3/Runtime/Triggers/ObservableEventTriggerへ切り替える。
</pre>
+
  
 
==Observable.EveryUpdate()~AddTo()の返り値まわり対応==
 
==Observable.EveryUpdate()~AddTo()の返り値まわり対応==
 
<pre>
 
<pre>
// R3
 
Observable.EveryUpdate()
 
.Subscribe(_ => {
 
            }).AddTo(disposable);
 
 
//UniRx
 
//UniRx
 
var observable = Observable.EveryUpdate()
 
var observable = Observable.EveryUpdate()
 
.Subscribe(_ => {
 
.Subscribe(_ => {
 +
            }).AddTo(disposable);
 +
 +
// R3
 +
Observable.EveryUpdate()
 +
.Subscribe(_ => {
 +
                // 略
 
             }).AddTo(disposable);
 
             }).AddTo(disposable);
 
</pre>
 
</pre>
行60: 行77:
 
==ReactiveCollectionをObservableList<T>へ==
 
==ReactiveCollectionをObservableList<T>へ==
 
ObservableList では、`using ObservableCollections;`を追加する。
 
ObservableList では、`using ObservableCollections;`を追加する。
 +
 
<pre>
 
<pre>
// R3
+
// UniRx
using ObservableCollections;
+
private ReactiveCollection<string> users = new ReactiveCollection<string>();
private ObservableList<string> users = new ObservableList<string>();
+
 
users
 
users
 
     .ObserveAdd()
 
     .ObserveAdd()
行71: 行88:
 
     });
 
     });
  
// UniRx
+
// R3
private ReactiveCollection<string> users = new ReactiveCollection<string>();
+
using ObservableCollections;
 +
private ObservableList<string> users = new ObservableList<string>();
 
users
 
users
 
     .ObserveAdd()
 
     .ObserveAdd()
行79: 行97:
 
         Debug.Log($"[Add]Index={value.Index},Value={value.Value}");
 
         Debug.Log($"[Add]Index={value.Index},Value={value.Value}");
 
     });
 
     });
 +
 
</pre>
 
</pre>
  
 
==SubjectのSubscribeの置換==
 
==SubjectのSubscribeの置換==
 
<pre>
 
<pre>
// R3
+
// UniRx
 
Subject<string> subject = new Subject<string>();
 
Subject<string> subject = new Subject<string>();
 
subject
 
subject
行89: 行108:
 
         message => Debug.Log("msg1:" + message),
 
         message => Debug.Log("msg1:" + message),
 
         error => Debug.LogError("Error" + error)
 
         error => Debug.LogError("Error" + error)
 +
        () => Debug.Log("Completed")
 
             );
 
             );
  
// UniRx
+
// R3
 
Subject<string> subject = new Subject<string>();
 
Subject<string> subject = new Subject<string>();
 
subject
 
subject
行97: 行117:
 
         message => Debug.Log("msg1:" + message),
 
         message => Debug.Log("msg1:" + message),
 
         error => Debug.LogError("Error" + error)
 
         error => Debug.LogError("Error" + error)
        () => Debug.Log("Completed")
 
 
             );
 
             );
 
</pre>
 
</pre>
 +
==TakeUntilDestroy()はAddTo()へ置換==
 +
TakeUntilDestroyは、R3に存在しないので、AddTo()へ
 +
<pre>
 +
// UniRx
 +
button.OnClickAsObservable()
 +
    .TakeUntilDestroy(gameObject)
 +
    .Subscribe(_ => {
 +
        Debug.Log("click!");
 +
    });
 +
 +
// R3
 +
CompositeDisposable disposable;
 +
disposable = new CompositeDisposable();
 +
button.OnClickAsObservable()
 +
    .Subscribe(_ => {
 +
        Debug.Log("click!");
 +
    })
 +
    .AddTo(disposable);
 +
</pre>
 +
参考:https://naninunenoy.hatenablog.com/entry/2024/03/07/001818

2024年4月4日 (木) 09:07時点における最新版

公式

変更メソッド名一覧

https://github.com/Cysharp/R3?tab=readme-ov-file#classmethod-name-changes-from-dotnetreactive-and-neueccunirx

using置換

- using UniRx;
+ using R3;
- using UniRx.Triggers;
+ using R3.Triggers;
- using System;

参考:https://zenn.dev/tkada/articles/a96258e080056a

ObserveEveryValueChangedはEveryValueChangedへ

// UniRx
transform.ObserveEveryValueChanged(_ => _.Count).Subscribe(count => Debug.Log(count))
    .AddTo(gameObject);

// R3
CompositeDisposable disposable;
disposable = new CompositeDisposable();
Observable.EveryValueChanged(transform, _ => _.Count)
    .Subscribe(count => Debug.Log(count))
    .AddTo(disposable);

参考:https://qiita.com/toRisouP/items/4344fbcba7b7e8d8ce16

IObservableをObservableへ

Collisionの置換の場合

// UniRx
ObservableCollision2DTrigger landTrigger;
IObservable<Collision2D> landOnCollisionEnterAsObservable = landTrigger.OnCollisionEnter2DAsObservable();

// R3
ObservableCollision2DTrigger landTrigger;
Observable<Collision2D> landOnCollisionEnterAsObservable = landTrigger.OnCollisionEnter2DAsObservable();

Observable.Createの置換の場合

// UniRx
IObservable<int> isCompletedsAsObservable = Observable.Create<int>(observer =>
            {
                return Disposable.Empty;
            });
// R3
Observable<int> isCompletedsAsObservable = Observable.Create<int>(observer =>
            {
                return Disposable.Empty;
            });

ObservableEventTriggerを設置してる場合は

InspectorにUnityEngineBridge/Triggers/ObservableEventTriggerを設置してる場合は、 R3/Runtime/Triggers/ObservableEventTriggerへ切り替える。

Observable.EveryUpdate()~AddTo()の返り値まわり対応

//UniRx
var observable = Observable.EveryUpdate()
.Subscribe(_ => {
            }).AddTo(disposable);

// R3
Observable.EveryUpdate()
.Subscribe(_ => {
                // 略
            }).AddTo(disposable);

ReactiveCollectionをObservableList<T>へ

ObservableList では、`using ObservableCollections;`を追加する。

// UniRx
private ReactiveCollection<string> users = new ReactiveCollection<string>();
users
    .ObserveAdd()
    .Subscribe(value =>
    {
        Debug.Log($"[Add]Index={value.Index},Value={value.Value}");
    });

// R3
using ObservableCollections;
private ObservableList<string> users = new ObservableList<string>();
users
    .ObserveAdd()
    .Subscribe(value =>
    {
        Debug.Log($"[Add]Index={value.Index},Value={value.Value}");
    });

SubjectのSubscribeの置換

// UniRx
Subject<string> subject = new Subject<string>();
subject
    .Subscribe(
        message => Debug.Log("msg1:" + message),
        error => Debug.LogError("Error" + error)
        () => Debug.Log("Completed")
            );

// R3
Subject<string> subject = new Subject<string>();
subject
    .Subscribe(
        message => Debug.Log("msg1:" + message),
        error => Debug.LogError("Error" + error)
            );

TakeUntilDestroy()はAddTo()へ置換

TakeUntilDestroyは、R3に存在しないので、AddTo()へ

// UniRx
button.OnClickAsObservable()
    .TakeUntilDestroy(gameObject)
    .Subscribe(_ => {
        Debug.Log("click!");
    });

// R3
CompositeDisposable disposable;
disposable = new CompositeDisposable();
button.OnClickAsObservable()
    .Subscribe(_ => {
        Debug.Log("click!");
    })
    .AddTo(disposable);

参考:https://naninunenoy.hatenablog.com/entry/2024/03/07/001818