数秒間、敵の攻撃を無効化する方法。
(考え方)
敵の攻撃が当たっても、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」オブジェクトをドラッグ&ドロップすると完成です。