質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3246閲覧

UniRx / OnTrigger について質問です

Taku.

総合スコア16

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/05/04 02:29

編集2019/05/04 02:30

現状のエラー

C#

1void Start(){ 2this.OnTriggerEnterAsObservable() 3 .Select(collision => collision.tag) 4 .Where(tag => tag == "person") 5 .Subscribe(l => Hoge()) 6 .AddTo(collision.gameobject);//ここが正しくない 7} 8 9void Hoge(){ 10 //ここで判定したゲームオブジェクトを使いたいです 11} 12

やりたいこと

OnTriggerで反応した"person"のtagがついたゲームオブジェクトのをHoge()で使いたいです。
.AddToでcollision.gameobjectを入れるもエラーが出てしまいどうすれば良いか悩んでいます。
ご教授頂ければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそも、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/04 10:24

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Taku.

2019/05/05 02:58

そういうことだったのですね。 大変勉強になりました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問