質問: ### 前提・実現したいこと Prefabから動的に生成したオブジェクトとキャラクターが接触・衝突した際にシーン遷移を行いたい ### 発生している問題・エラーメッセージ ``` キャラクターに敵が衝突した際に、当たり判定(ここではOnControllerColliderHit)が全く機能しないため、シーン遷移ができない。 ``` ### 該当のソースコード プレイヤー側には、このようなスクリプトをインポートしています。 ``` using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class GameOverSceneChanger : MonoBehaviour { // Use this for initialization void OnControllerColliderHit(ControllerColliderHit other) { if (other.gameObject.CompareTag("Enemy(Clone)")) { SceneManager.LoadScene("GameOver"); } } } ``` ### 試したこと ・Prefabから生成されるオブジェクトはオブジェクト名最後尾に(Clone)がつくため、このせいで動かないのではと推測し、Enemyを一定時間ごとに生成するスクリプトの中に毎回Update()内でリネームするための処理を入れてみました。 →リネームがうまくいかず断念 ・最初はEnemy側でもCharactor Controllerを用いて動かしていましたが、Enemy側にCharatorControllerではなく、Rigidbody + CapsuleCollider を実装し、当たり判定を取ろうとしました。 →どちらでもうまくいかない ・上記のスクリプトをPrefab内のEnemyに適応してみました。 →これもうまくいきませんでした 実装力が未熟で非常に申し訳ないです。しかし、これ以上どうすれば正しく動作するのか、今の私にはどう考えてもわかりませんでした。 ぶしつけではありますが、もしよろしければ何かアドバイスをいただきたいです。 最後に、プレイヤーと敵のプロパティ、並びに実行した際のプレイヤーと敵が衝突している際のスクリーンショットを添付します。 回答お待ちしています。 ![プレイヤーのプロパティ](https://teratail.storage.googleapis.com/uploads/contributed_images/ef417bb69025e02a9fac6a16255d19e8.png) ![敵のプロパティ](https://teratail.storage.googleapis.com/uploads/contributed_images/1802f153b28e82b4038a419700a3a1b4.png) ![白:プレイヤー、黒:敵](https://teratail.storage.googleapis.com/uploads/contributed_images/844de8523e2b2a99491553e2e8054455.png)
回答: OnControllerColliderHitが呼ばれていないと判断したのはSceneが移行しないから、という理由でしょうか? もしif文の外でDebug.Log()等を使用せずに判断したのなら、まずはそちらの方を試してみてください。 また、gameObject.CompareTagですが、こちらはオブジェクトについているタグで比較します。 スクリーンショットをみたところ、EnemyのタグはUntaggedになっていますので、そちらを(Add Tags→Tagsのところの+から、新しいタグを生成してください) if (other.gameObject.CompareTag("Enemy")) こちらに書いてあるタグ名と同じものに変更してみてください。