そもそも、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