何かにぶつかった後、跳ね返る方向をランダムにできるように、スクリプトを作成してみましょう。
今回の例では、Cubeに向かって真っすぐにボールを転がします。
弾き返されるとき、その角度がランダムで変わっていきます。
弾き返される角度をランダムで変える
Planeを作成しその上に、Cube、Sphereを置きます。
CubeとSphereは、対面に配置しましょう。
Sphereにリジッドボディを追加します。
プロジェクトビューの中に、物理マテリアルを作成します。
右クリック > 作成 > 物理マテリアル
跳ね返りの強さは、「弾性力」になります。
数値を上げれば、よく跳ね返るようになります。
ここでは0.6に設定しました。
NewPhysicMaterial(物理マテリアル)を、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 26 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class BallScript : MonoBehaviour { Rigidbody rb; float power; void Start() { power = 10.0f; rb = GetComponent<Rigidbody>(); rb.AddForce(0, 0, power, ForceMode.Impulse); } void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Cube") { float randomX = Random.Range(-8.0f, 8.0f); rb.velocity = Vector3.zero; rb.AddForce(randomX, 0, -power, ForceMode.Impulse); } } } |
ゲームプレイしてみましょう。
プレイするたびに、跳ね返りの角度がランダムで変化します。
AddForceで力を加える方向は、(x,y,z, ForceMode)で設定します。
Impulseはドンと一気に力を加えるモードです。
Cubwにぶつかれば、velocityをゼロにして速度をリセット。
X方向への力は、-8.0から8.0のランダムにしています。