数秒間、敵の攻撃を無効化する方法。
(考え方)
敵の攻撃が当たっても、HPが減少しないようにする。そのためのロジックを考える。
1)無敵アイテムを作成する
・色、形、大きさは自由です。
・「Muteki 」スクリプトを1つ作成。下記のコードを記載しましょう。
・コードのチェックが完了したら「Muteki 」オブジェクトにドラッグします。
*「音」と「エフェクト」は自由です。
using UnityEngine;
using System.Collections;
public class Muteki : MonoBehaviour {
	// エフェクトのデータを入れる箱
	public GameObject effectPrefab;
	// 音のデータを入れる箱
	public AudioClip mutekisound;
	void OnCollisionEnter(Collision other){
		if(other.gameObject.CompareTag("Player")){
			AudioSource.PlayClipAtPoint(mutekisound, transform.position);
			Destroy(gameObject);
			GameObject effect = Instantiate(effectPrefab, transform.position, Quaternion.identity)as GameObject;
			Destroy(effect, 0.5f);
		}
	}
}
2)無敵状態を作る
次は無敵状態を作ります。
・「TankHealth」スクリプトをダブルクリックして開きましょう。この中に、★無敵(追加)の部分のコードを追加しましょう。
*今回のロジックの肝は「isMuteki = false」「&& isMuteki == false」「isMuteki = true」にあります。このロジックの意味を考えてみましょう。
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class TankHealth : MonoBehaviour {
	public GameObject effectPrefab1;
	public GameObject effectPrefab2;
	public int tankHP;
	public Text tankHPLabel;
	private Slider slider;
	// ★無敵(追加)
	private bool isMuteki = false;
	public GameObject barrier;
	void Start(){
		tankHPLabel.text = "" + tankHP;
		slider = GameObject.Find("TankHPSlider").GetComponent<Slider>();
	}
		
	void OnCollisionEnter(Collision other){
		// ★無敵(追加)
		if(other.gameObject.CompareTag("Muteki")){
			isMuteki = true;
			barrier.SetActive(true);
			// ここがポイント(意味を考えよう)
			Invoke("TankStatus", 10);
		}
		// ★無敵(elseと&& isMuteki == falseを追加)
		else if(other.gameObject.CompareTag("EnemyShell") && isMuteki == false){
			tankHP -= 1;
			tankHPLabel.text = "" + tankHP;
			slider.value = tankHP;
			if(tankHP > 0){
				GameObject effect1 = Instantiate(effectPrefab1, transform.position, Quaternion.identity) as GameObject;
				Destroy(effect1, 1.0f);
				Destroy(other.gameObject);
			} else {
				GameObject effect2 = Instantiate(effectPrefab2, transform.position, Quaternion.identity) as GameObject;
				Destroy(effect2, 1.0f);
				Destroy(other.gameObject);
				gameObject.SetActive(false);
				Invoke("SceneChange", 3.0f);
			}
		}
	}
		
	void SceneChange(){
		SceneManager.LoadScene("GameOver");
	}
	// ★無敵(追加)
	void TankStatus(){
		isMuteki = false;
		barrier.SetActive(false);
	}
	public void AddHP(int amount){
		tankHP += amount;
		tankHPLabel.text = "" + tankHP;
		slider.value = tankHP;
	}
}
3)半透明バリアの作り方
・Tankの子供として「Cube」を作成。名前を「Barrier」に変更
*「Box Collider」のチェックは外す。
・AssetsでMaterialを1つ作成。名前を「Barrier」に変更。
・「Rendering Mode」を「Fade」に変更(ここがポイント)
・Colorパレッドの「A」の部分を左にスライドさせると、半透明になります。
*A=alphaの頭文字(色の透過度を表す)
・最後に半透明になった「Barrier」オブジェクトをドラッグ&ドロップすると完成です。




