(Unity)Trapに触れると一時的に動けないようにする

(1)下準備

  • オブジェクトを作成
  • 名前を「StopTrap」に変更

(2)スクリプトの作成

  • 新規にC#スクリプトを作成
  • 名前を「StopTrap」に変更
  • 下記のコードを書いてチェック

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StopTrap : MonoBehaviour
{
    public GameObject effectPrefab;
    public AudioClip sound;
    private Ball ball;

    private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.CompareTag("Player"))
        {
            // ポイント
            // Ballの動きを司るスクリプトをオフにする。
            ball = collision.gameObject.GetComponent<Ball>();
            ball.enabled = false;

            GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity);
            Destroy(effect, 2.0f);
            AudioSource.PlayClipAtPoint(sound, transform.position);

            // ポイント
            // 2秒後にボールが動けるようにする。
            Invoke("StopOff", 2.0f);
        }
    }

    void StopOff()
    {
        // ポイント
        // Ballの動きを司るスクリプトをオンにする。
        ball.enabled = true;
    }
}

(3)設定

  • スクリプトをStopTrapオブジェクトに追加
  • エフェクトとサウンドを自由に設定

  • Ballオブジェクトに「Player」のタグを設定

  • ゲームを再生して確認
  • StopTrapに触れた瞬間、エフェクトとサウンドが発生
  • 2秒間、ボールが動けなくなる。
  • その後、再び動けるようになれば成功です。


<ここがポイント>

  • Ballを動かすスクリプトを一時的にオフにすることで動きを止めている。