衝突点が取れてるかどうかはpointをデバッグで表示すると良いと思います。
C#
1 void OnCollisionEnter(Collision collision) {
2 foreach (ContactPoint point in collision.contacts) {
3 Debug.Log(point.point); // Vector3 で位置が出力されるはず
4 }
5 }
どういう状況を想定した動きなのかわからなかったので、とりあえず動作するのだけテストしてみました。
- Unityエディタ上にCube(座標 0,0,0)、その真上にSphere(座標 0,3,0)を作成しました。
- 下記コードをCubeにアタッチ。実行。
SphereがCubeに衝突するのは(座標 0,0.5,0)です。
なので、そこからZ軸に5f離れた(座標 0,0.5,5)に新しくCubeが作成されます。
※動作確認用なので、SphereにRigidbodyをつけて自重でCubeに落下させて衝突させてます。
物理演算つけたくない場合はKinematicにするなどうまいこと調整してみてください。
下記コードはCubeにアタッチ
C#
1using System.Collections;
2using System.Collections.Generic;
3using UnityEngine;
4
5public class test : MonoBehaviour
6{
7
8 float spawn = 5f; // Z軸にどのぐらい離して生成するか
9
10 void OnCollisionEnter(Collision collision) {
11 foreach (ContactPoint point in collision.contacts) {
12
13 GetComponent<Renderer>().material.color = Color.red;
14 collision.gameObject.GetComponent<Renderer>().material.color = Color.blue;
15
16 // Cubeを作成
17 var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
18 cube.transform.position = new Vector3(point.point.x, point.point.y, point.point.z + spawn);
19 }
20 }
21}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/07 06:27
2019/03/08 01:00
2019/03/08 01:05 編集
2019/03/08 02:43