接触している相手オブジェクトに、n秒おきに力を加えるように、スクリプトを作成してみましょう。
Sphereオブジェクトが触れると、1秒おきに上に向かって力を与えます。
関連記事:
AddForceを使ったジャンプとvelocityによるジャンプ
Invokeを使ってn秒後に関数を実行する
クリックした位置に力を加えて弾く
特定の座標まで行けば跳ね返る
バウンドの高さをスクリプトから調整
プレーヤーがひっくり返らないようにする
倒れる方向をランダムにする
傾斜を上っていくPrefab
接触するとn秒おきに押し出す
Plane、Cube、Sphereを作成し、このように配置します。
Sphereにはリジッドボディを追加し、転がっていかないように、回転を固定します。
PushObject.csを作成し、Cubeに追加します。
PushObject.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PushObject : MonoBehaviour { public Rigidbody targetRb; private float force = 300; void OnCollisionEnter(Collision other) { if(other.gameObject.name == "Sphere") { targetRb = other.gameObject.GetComponent<Rigidbody>(); Invoke("UpForce", 1.0f); } } void UpForce() { targetRb.AddForce(new Vector3(0, force, 0 )); } } |
ゲームプレイしてみましょう。
Sphereが触れると、Cube側から、Sphereに対して力を加えています。
1秒おきに、オブジェクトを弾き飛ばすしくみが完成しました。
関連記事:
AddForceを使ったジャンプとvelocityによるジャンプ
Invokeを使ってn秒後に関数を実行する
クリックした位置に力を加えて弾く
特定の座標まで行けば跳ね返る
バウンドの高さをスクリプトから調整
プレーヤーがひっくり返らないようにする
倒れる方向をランダムにする
傾斜を上っていくPrefab