質問: ### 前提・実現したいこと 今現在、プレイヤーと物体がぶつかるとシーン切り替えをする というプログラムを実装しています プレイヤーが物体の手前でぶつかった時のみに シーンの切り替えをする事は可能でしょうか。 プログラムが書けなくて困っています。 ご教授いただけますと助かります。 ### 該当のソースコード using UnityEngine; using System.Collections; using UnityEngine.SceneManagement;// ←new! public class scene : MonoBehaviour { void OnTriggerEnter (Collider other) { SceneManager.LoadScene("1");// ←new! } } よろしくお願い致します。
回答: ■一方向だけ当たればいい場合(前面だけなど) →Cubeオブジェクトに付けたColliderオブジェクトの位置や大きさを調整してください。 (ColliderコンポーネントのSizeやCenterを変えることで設定可能です) ■複数方向の当たり判定を取りたいが、当たった時の処理は同一でいい場合 →Colliderコンポーネントはオブジェクトに複数付与出来ます。 例えばColliderを2つ付け、片方を前面、片方を背面を覆うように位置や大きさを調整すれば、両方の当たり判定が取れます。 ただこの場合、どちらが当たってもCubeに付いたスクリプトのOnCollision系/OnTrigger系メソッドが呼ばれ、どちらが当たったのかの区別は出来ません。 ■複数方向の当たり判定を取りたい、当たった時の処理は別々にしたい場合 →Cubeの子オブジェクトとして、当たり判定を取りたい方向の数だけGameObjectを作成します。 子オブジェクトにColliderを1つ付け、位置と大きさを調整。更にOnCollision系/OnTrigger系のメソッドを持つスクリプトを付与します。 (CubeのColliderとOnCollision系/OnTrigger系のメソッドは取り除いておきます) こうすると衝突が子オブジェクトで発生するので、子のスクリプトから親のスクリプトへ衝突があったことを伝達する(ついでにどの子で衝突が起こったかgameObject.nameなりtagなりで渡す)ことで、当たった位置に応じて別々の当たり判定が取れます。 (もちろん処理がシンプルなら、子オブジェクトのOnCollision系/OnTrigger系メソッド内で処理すればいいかと思います) ■別案:衝突情報から判定する collision.contactsで当たり判定の位置等が取得出来るので、それがCubeの前面であるかどうか計算することで判定可能です。