オブジェクトを発射したとき、パワーが大きすぎると壁をすり抜けてしまうことがあります。
ぶつかってもすり抜けてしまわないように、リジッドボディの衝突判定の設定を行いましょう。
弾がすり抜けないようにする
Planeの上にCubeで壁をつくりました。
空のオブジェクトを作成。
ここからボールを発射できるようにします。
発射するオブジェクトとして、Sphereを用意します。
リジッドボディを追加し、衝突判定を連続的に変更します。
Sphereをプレハブ化します。
Sphereの元データは削除しましょう。
BallShot.csを作成し、GameObject(空のオブジェクト)に追加します。
BallShot.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallShot : MonoBehaviour { public GameObject prefab; void Update() { if(Input.GetMouseButtonDown(0)) { GameObject ball = Instantiate(prefab, this.transform.position,Quaternion.identity); ball.GetComponent<Rigidbody>().AddForce(transform.forward * 5000,ForceMode.Force); } } } |
プレハブのフィールドに、Sphereを入れます。
ゲームプレイして、クリックしてみましょう。
AddFordeで5000のパワーを加えています。
通常は壁をすり抜けてしまうぐらいのパワーですが、衝突判定を「連続的」に設定すれば、壁にぶつかってストップします。