【バイオハザード風のゲームを作ってみよう。その19】
今回もこちらをやっていきます。
youtu.be
プレイヤーのHealth表示を実装していきます。
・Health画像を準備します。私はGoogleスライドで作りました。
・準備した画像を画面に表示させます。
・心電図風のアニメーションを作っていきます。また、心電図の軌跡をはっきりする為にparticle Systemを使用します。
・下記スクリプトを追加します。
public class StatusPopUpsUI : MonoBehaviour //EP19追加 PlauerUI直下のStatus Pop Upsにアタッチ { CanvasGroup canvasGroup; [SerializeField] GameObject popUpFineFull; [SerializeField] GameObject popUpFineDamagrd; [SerializeField] GameObject popUpCaution; [SerializeField] GameObject popUpDanger; [Header("Fade Options")] [SerializeField] float timeBeforeFadeOutBegins=2f; private void Awake() { canvasGroup = GetComponent<CanvasGroup>(); } //画像をOFFする private void DisableAllPopUps() { popUpFineFull.SetActive(false); popUpFineDamagrd.SetActive(false); popUpCaution.SetActive(false); popUpDanger.SetActive(false); } //プレイヤーHPにより表示する画像を変更 public void DisplayHealthPopUp(int playerHealthPercentage) { if (playerHealthPercentage >= 100) { popUpFineFull.SetActive(true); } else if (playerHealthPercentage >= 66 && playerHealthPercentage<=99) { popUpFineDamagrd.SetActive(true); } else if (playerHealthPercentage >= 33 && playerHealthPercentage <= 65) { popUpCaution.SetActive(true); } else if (playerHealthPercentage >= 1 && playerHealthPercentage <= 29) { popUpDanger.SetActive(true); } StartCoroutine(FadeInPopUp()); } IEnumerator FadeInPopUp() { //徐々に画像のアルファを上げていく for (float fade = 0.05f; fade < 1; fade =fade + 0.05f) { canvasGroup.alpha = fade; //アルファが一定値に達したら、徐々にアルファを下げる if (fade > 0.9f) { StartCoroutine(FadeOutPopUp()); } Debug.Log("We are fading in the pop up"); yield return new WaitForSeconds(0.05f); } } IEnumerator FadeOutPopUp() { //WAIT A SECOND BEFORE WE FADE OUT yield return new WaitForSeconds(timeBeforeFadeOutBegins); //徐々にアルファを下げる for (float fade = 1; fade > 0; fade = fade - 0.05f) { canvasGroup.alpha = fade; //アルファが一定値に達したら、画像をOFFする if (fade <= 0.05f) { DisableAllPopUps(); } Debug.Log("We are fading out the pop up"); yield return new WaitForSeconds(0.05f); } } }
public class PlayerUIManager : MonoBehaviour //EP6追加 Canvasにアタッチ { PlayerManager player; //EP19追加 StatusPopUpsUI statusPopUpsUI; //EP19追加 [Header("Crosshair")] public GameObject crosshair; [Header("Ammo")] public Text currentAmmoCountText; //EP14追加 //現在装備している銃の残弾数を表示 public Text reservedAmmoCountText; //EP14追加 //現在装備している銃の残弾数の総数表示 private void Awake() //EP19追加 { player = FindObjectOfType<PlayerManager>(); statusPopUpsUI = GetComponentInChildren<StatusPopUpsUI>(); } //EP19追加 プレイヤーのHealth表示を制御する public void DisplayHealthPopUp() { statusPopUpsUI.DisplayHealthPopUp(player.playerStatManager.playerHealth); } }
public class PlayerStatManager : MonoBehaviour //EP18追加 プレイヤーにアタッチ { (省略) public void TakeDamageFromGrapple() { playerHealth = playerHealth - pendingDamage; if (playerHealth <= 0) { KillPlayer(); } else //EP19追加 { player.playerUIManager.DisplayHealthPopUp(); } } }
プレイ動画です。
youtu.be
今回は以上です。