質問: Tpto.transform.position; Debug.Log ("true"); } } } ``` ### 試したこと ・Playerの中のBodyなどの一部のオブジェクトにRigidbodyとスクリプトを移動させたがそもそも移動できなくなった。 ・MeshColliderを一つにまとめて、Playerに付けちゃおうと思ったが、そもそも一つにまとめてしまうと、オブジェクトごとに当たり判定を消すことができなくなってしまうので断念。
回答: 解決されましたようで安心しました。お言葉に甘えまして回答欄にコメントさせていただきますと... 1. プレイヤーの体のある部位がテレポート領域に触れる。 2. テレポート領域の`OnTriggerEnter`が作動し、引数の`col1`にはその部位のコライダーが渡される。 3. たとえ一番上のプレイヤーオブジェクトに「Player」タグを付けていたとしても、今注目しているのはその部位のオブジェクトにアタッチされているコライダーなので(`if (col1.CompareTag ("Player"))`という風に、`col1`のタグが「Player」かどうかをチェックしている)、その部位に「Player」タグがついていないと`if`内に入らず、テレポートが発生しない。 という状況だった様子ですね。タグ設定はあくまでもそのオブジェクト自体にしか影響せず、子オブジェクトは親オブジェクトのタグ設定の影響を受けるわけではないため、このようなことになったものと考えられます。 `OnTriggerEnter`自体が発生していないのか、あるいは条件判定に失敗しているのかは、現状のコードですとコンソールに「true」が表示されるかどうかだけでは区別できないはずです。 区別するには`if`の外にもなにかしら`Debug.Log`を入れて... ``` void OnTriggerEnter (Collider col1) { Debug.Log("OnTriggerEnter"); // ここはOnTriggerEnterが発生しさえすれば実行される if (col1.CompareTag ("Player")) { Player.transform.position = Tpto.transform.position; Debug.Log ("true"); // ここはOnTriggerEnterが発生、かつ条件判定もクリアしないと実行されない } } ``` としてやる手があるでしょう。 * 「OnTriggerEnter」と「true」が両方表示されれば正常 * 「OnTriggerEnter」だけが表示されるなら条件判定の失敗 * どちらも表示されないなら`OnTriggerEnter`自体が発生していない(Is Triggerの設定ミスなど) という風に、原因特定のヒントになるかと思います。