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




