OnCollisionStayを使うと、他のオブジェクトに触れている間、毎フレーム呼び出せるようになります。
床に触れている間はずっと前に動いて、浮上しているときは動かない。
接地している間はグリーン、していないときはレッドという具合に切り替えています。
関連記事:
オブジェクトに触れていれば動く
領域に入っている間と離れたときに発生
OnCollisionEnterとOnTriggerEnterの違い
オブジェクトから離れるとイベント発生
触れた相手のオブジェクト名を取得
ぶつかったオブジェクトと同じカラーにする
オブジェクトの外周に沿って動く
床の外側に沿って移動をくり返す
OnCollisionStayで毎フレーム呼び出す
まずはPlaneオブジェクト(平面)とCubeを用意しましょう。
Cubeにはリジッドボディを追加。
Cubeオブジェクトに、ClickUp.csを作成します。
ClickUp.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 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ClickUp : MonoBehaviour { private Rigidbody rb; public float upForce = 200f; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { if(Input.GetMouseButtonDown(0)) { rb.AddForce(new Vector3(0,upForce,0 )); } } //床から離れたとき private void OnCollisionExit(Collision collision) { if (collision.gameObject.name == "Plane" ) { GetComponent<Renderer>().material.color = Color.red; } } //床に接している間 private void OnCollisionStay(Collision collision) { if (collision.gameObject.name == "Plane" ) { GetComponent<Renderer>().material.color = Color.green; transform.Translate(0, 0, 0.02f); } } } |
ゲームプレイして、動きを確認しましょう。
地面に接している間はずっとZ方向に動いていきます。
クリックで浮上したときは、Z方向への動きはとまります。
関連記事:
オブジェクトに触れていれば動く
領域に入っている間と離れたときに発生
OnCollisionEnterとOnTriggerEnterの違い
オブジェクトから離れるとイベント発生
触れた相手のオブジェクト名を取得
ぶつかったオブジェクトと同じカラーにする
オブジェクトの外周に沿って動く
床の外側に沿って移動をくり返す