【Unity 3D】引数つきコルーチンを使って、あるコンポーネントのプロパティを数秒無効にする方法
引数つきのコルーチン(Coroutin)を使って当たった相手のRigidBodyコンポーネントのuseGravityプロパティを指定した秒数無効にする方法を紹介します。
目次
完成動作
作り方
1.シーンに各オブジェクトを配置
1-1.以下のように床(Cube)を斜めにして、Sphere(赤)が転がっていく先に、Cylinder(青)があるようにします。
流れとしては、RigidbodyコンポーネントをアタッチしたSphere(赤)が転がって、Cylinder(青)に当たると、指定した秒数、Sphere(赤)のRigidbodyコンポーネントのuseGravityプロパティを無効にして、無重力状態にするという感じです。
1-2.Sphere(赤)にRigidbodyコンポーネントをアタッチしておく
2. 2-1.当たった相手のコンポーネントのプロパティを指定した秒数無効にするスクリプトを作成
2-1.Coroutine.csという名前のスクリプトを作成して、以下のコードを記載する。
using System.Collections;
using UnityEngine;
public class Coroutine : MonoBehaviour
{
/// <summary>
/// 衝突した時
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter(Collision collision)
{
// 衝突した相手にPlayerタグが付いているとき
if (collision.gameObject.tag == "Player")
{
// ChangeUseGravityコルーチンをスタートする
StartCoroutine(ChangeUseGravity(collision.gameObject, 2.0f));
}
}
/// <summary>
/// RigidbodyコンポーネントのuseGravityプロパティを
/// 指定した秒数無効にする。
/// </summary>
/// <param name="lGameObject">useGravityを無効にしたいGameObject</param>
/// <param name="seconds">無効にする秒数</param>
/// <returns></returns>
IEnumerator ChangeUseGravity(GameObject lGameObject, float seconds)
{
// useGravityを無効にする
lGameObject.GetComponent<Rigidbody>().useGravity = false;
// 指定された秒数待つ
yield return new WaitForSeconds(seconds);
// useGravityを有効にする
lGameObject.GetComponent<Rigidbody>().useGravity = true;
}
}
3.スクリプトをアタッチ
3-1.Coroutineスクリプトを相手のコンポーネントのプロパティを無効にさせたいGameObjectにアタッチ(今回はCylinder(青))
4.コンポーネントのプロパティを無効にさせたいGameObjectに"Player"タグを付与
4-1.Sphere(赤)に"Player"タグをつける。
完成
これでゲームをスタートして、Sphere(赤)がCylinder(青)に当たるとSphere(赤)が数秒間無重力状態になって、数秒間経過したら重力に従って落ちます。
ディスカッション
コメント一覧
まだ、コメントがありません