そもそも、AddToはこの場面では不要かと思います。Subscribeによって生成されたサブスクリプションに対してAddToを行うと「AddToの引数に指定されたオブジェクトの破棄タイミングでサブスクリプションが解除される」という動作になるはずで、解除の引き金とするオブジェクトの候補としてはこのスクリプトコンポーネント自身が妥当でしょう。ですが、OnTriggerEnterAsObservableで作ったストリームはもともとこのスクリプトの破棄タイミングで停止するよう設定されているはずですから、今回の場合はAddToを使う必要はなさそうです。
その上で、下記のように変更してみてはいかがでしょうか?
Hogeは引数としてColliderを受け取るようにする。
Selectでタグだけを取り出すのはやめる。ここでタグを取り出してしまうと、ストリームの下流に流れていくのはそのタグ文字列だけになってしまい、Hogeにコライダーを受け渡すチャンスがなくなってしまう。
- 代わりに、
Whereで絞り込みを行うときに上流から流れてきたコライダーについてタグ比較判定を行う。このWhereの下流には判定をクリアしたコライダーだけが流れていく。
Subscribeで上流からやってきたコライダーを受け取り、Hogeの引数に与える。
C#
1void Start()
2{
3 this.OnTriggerEnterAsObservable()
4 .Where(collider => collider.CompareTag("person"))
5 .Subscribe(collider => Hoge(collider));
6}
7
8void Hoge(Collider personCollider)
9{
10 // もしColliderではなくGameObjectが必要なら、引数のコライダーから取り出す
11 var personObject = personCollider.gameObject;
12
13 // personタグのトリガーに触れたときだけメッセージが表示されれば成功
14 Debug.Log($"OnTriggerEnter Name:{personObject.name} Tag:{personObject.tag}");
15}
2019/05/05 02:58