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

投稿日: カテゴリー: Unity(V5.3.6)

1)Trapオブジェクトを作成する

大きさ、形、色は自由。

名前も自由に決めましょう。

*今回は、このTrapオブジェクトに触れたら一時的に動けないような仕組みを作ります。


2)スクリプトを作成する

・新しくC#スクリプトを1つ作成してください。

・名前を「TrapB」に変更しましょう。

using UnityEngine;
using System.Collections;

public class TrapB : MonoBehaviour {

	private TankMovement TM;
	public AudioClip trapSound;
	public GameObject effectPrefab;

	void OnTriggerEnter(Collider other){
		if(other.gameObject.CompareTag("Player")){

			// Trapを画面から消す。
			// DestroyメソッドだとInvokeメソッドを使えない(ポイント)。
			this.gameObject.SetActive(false);

			// 効果音を出す。
			AudioSource.PlayClipAtPoint(trapSound, transform.position);

			// エフェクトを出す。(posでエフェクトの出現位置を調整する。)
			Vector3 pos = other.transform.position;
			GameObject effect = (GameObject)Instantiate(effectPrefab, new Vector3(pos.x, pos.y + 1, pos.z - 1), Quaternion.identity);

			// エフェクトを2秒後に消す。
			Destroy(effect, 2.0f);

			// プレーヤーの動きを止める。
			TM = other.GetComponent<TankMovement>();
			TM.enabled = false;

			// 2秒後にReleaseメソッドを呼び出す。
			Invoke("Release", 2.0f);
		}
	}

	void Release(){
		TM.enabled = true;
	}
}

・コードが書けたらチェック。

・このスクリプトをトラップの「オブジェクト」に付けましょう。


3)音とエフェクトの設定

ここまでできたら再生してみましょう。

トラップに触れた瞬間、「動きが止まる」「音が出る」「エフェクトが出る」→「数秒後に動けるようになる」の一連の流れができていれば成功です。


(ここがポイント!)

「Tank(プレーヤー)を動かすためのコンポーネント(TankMovementスクリプト)を一時的に無効(OFF)」にすることで、「動けない状態」を作りだしています。


(サイト紹介)

『CodeGenius | Unity初心者のための学習サイト』