ある座標までたどりつけば跳ね返る仕組みをつくってみましょう。
ボールに力を加えて前方に飛ばし、特定の座標までくると、はじき返されます。
関連記事:
座標を整数に変換して条件分岐
座標の小数値を端数処理して条件設定
バウンドの高さをスクリプトから調整
オブジェクトに跳ね返り(バウンド)の設定
AddForceを使ったジャンプとvelocityによるジャンプ
3地点で方向転換しながら移動し続ける
触れている相手に一定間隔で力を加える
座標まで行けばはね返る
Sphereを作成します。
Sphereにリジッドボディを追加します。
Use Gravityのチェックを外します。
SphereMove.csを作成し、Sphereに追加します。
SphereMove.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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class SphereMove : MonoBehaviour { public float xForce; public float zForce; public Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); rb.AddForce(0, 0, 10, ForceMode.VelocityChange); } void Update() { if(transform.position.z > 10) { xForce = Random.Range(-5,5); rb.velocity = Vector3.zero; rb.AddForce(xForce, 0, -10, ForceMode.VelocityChange); } if(transform.position.z < -10) { xForce = Random.Range(-5,5); rb.velocity = Vector3.zero; rb.AddForce(xForce, 0, 10, ForceMode.VelocityChange); } if(transform.position.x > 10) { zForce = Random.Range(-5,5); rb.velocity = Vector3.zero; rb.AddForce(-10, 0, zForce, ForceMode.VelocityChange); } if(transform.position.x < -10) { zForce = Random.Range(-5,5); rb.velocity = Vector3.zero; rb.AddForce(10, 0, zForce, ForceMode.VelocityChange); } } } |
ゲームプレイしてみましょう。
XとZの位置をそれぞれ10に指定して、四方を囲みました。
ボールが座標まで来れば、逆方向と、ランダムで横方向にも力を加え、はね返しています。
ForceModeにはいくつか種類があります。
ここでは、質量を無視して、瞬発的に力を加える「VelocityChange」を使用しました。
関連記事:
座標を整数に変換して条件分岐
座標の小数値を端数処理して条件設定
バウンドの高さをスクリプトから調整
オブジェクトに跳ね返り(バウンド)の設定
AddForceを使ったジャンプとvelocityによるジャンプ
3地点で方向転換しながら移動し続ける
触れている相手に一定間隔で力を加える