発射したオブジェクトが跳ね返らず、壁にひっつくように、プログラムを作ってみましょう。
今回の例では、クリックでSphereを飛ばし、前方の壁にぶつかれば、落下せずに、そのまま張り付きます。
落下せずに張り付くオブジェクト
Cubeを作成し、サイズと位置を変更します。
ゲームビューでは、このように見えています。
Sphereを作成し、リジッドボディを追加。
BallScript.csを作成し、Sphereに追加します。
BallScript.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallScript : MonoBehaviour { public float force = 0.5f; public Rigidbody rb; void Update() { rb = GetComponent<Rigidbody>(); rb.isKinematic = false; } void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Cube") { rb.isKinematic = true; rb.velocity = Vector3.zero; rb.useGravity = false; } } } |
Sphereをプロジェクトビューにドラッグ&ドロップし、プレハブ化します。
Sphereの元データは削除します。
空のオブジェクトを作成します。
BallSpawn.csを作成し、GameObject(空のオブジェクト)に追加します。
BallSpawn.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BalSpawn : MonoBehaviour { public GameObject prefab; void Update() { if(Input.GetMouseButtonDown(0)) { GameObject ball = GameObject.Instantiate (prefab)as GameObject; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Vector3 dir = ray.direction; ball.GetComponent<Rigidbody>().AddForce(dir * 2000); } } } |
プレハブのフィールドに、Sphereを入れます。
ゲームプレイしてみましょう。
クリックでボール発射。
壁にぶつかると、ボールがその位置で止まり、落下したり跳ね返ったりしません。