さて、相手に撃たれて、HPが0になったらどうしましょう?
ここでは、”誰に倒されたか”を表示し、
5秒のカウントダウンとともに、自動で再スタートを実装したいと思います。
1.ゲームオーバーの実装
1-1.3つのText作成
・他プレイヤーに自分がゲーム―オーバーになったことを示すText(DeadText)
・自分が誰に倒されたかを示すText(KillText)
・リスタートまでのカウントダウンを表示するText(RespawnText)
をそれぞれ作成します。
PlayerPrefabの
WorldCanvasの配下にDeadTextを、
ScreenCanvasの配下にKillTextとRespawnTextを作成します。
Inspectorは次のようにします。
KillText
PosY:300
Text: (空白にする)
Font Size:60
Alignment:中央
Horizontal Overflow,Vertical Overflow:Overflow
Color:赤
※RespawnTextは、PosYを150として他は同じ
1-2.Textの制御(TakingDamage.csの追記)
後は、TakingDamage.csに追記するだけです!^^
using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Photon.Pun; public class TakingDamage : MonoBehaviourPunCallbacks { [SerializeField] Image hpBar; [SerializeField] GameObject deadText; //Inspectorから紐づけ [SerializeField] Text killText; //Inspectorから紐づけ [SerializeField] Text respawnText; //Inspectorから紐づけ private float hp; public float startHp = 100; // Start is called before the first frame update void Start() { hp = startHp; hpBar.fillAmount = hp / startHp; } [PunRPC] public void TakeDamage(float _damage, PhotonMessageInfo info) //Photonのもつinfoも渡す { hp -= _damage; hpBar.fillAmount = hp / startHp; if(hp <= 0f) { deadText.SetActive (true); Die(); if(photonView.IsMine) { killText.GetComponent<Text>().text = "You were killed by " + info.Sender.NickName; //自分の画面にやられたことを表示 } } } void Die() { if(photonView.IsMine) { StartCoroutine(Respawn()); } } IEnumerator Respawn() { float respawnTime = 5.0f; while(respawnTime > 0F) //0になるまで繰り返す { yield return new WaitForSeconds(1f); respawnTime -= 1.0f; transform.GetComponent<MovementController>().enabled = false; //動けない状態 transform.GetComponent<Shoot>().enabled = false; //撃てない状態 respawnText.GetComponent<Text>().text = "Respawning at: " + respawnTime.ToString(); } killText.GetComponent<Text>().text =""; respawnText.GetComponent<Text>().text =""; int randomPoint = Random.Range(-20,20); transform.position = new Vector3(randomPoint, 0, randomPoint); //ランダムな場所へ移動 transform.GetComponent<MovementController>().enabled = true; //動ける状態 transform.GetComponent<Shoot>().enabled = true; //撃てる状態 photonView.RPC("RegainHP", RpcTarget.AllBuffered); //RPCでメソッドを呼ぶ } [PunRPC] public void RegainHP() { hp = startHp; //回復 hpBar.fillAmount = hp / startHp; //HPBarに反映 deadText.SetActive (false); //死亡非表示 } }
Inspectorより、TakingDamageの3つの項目に、
作成していたTextオブジェクトを紐づけて、PlayerPrefabを保存します。
シーンからPlayerPrefabを削除して、LauncherSceneからゲームを実行して動作に問題ないか確認しましょう。
Hpの増減、Respawnなど確認する場合は、
相手が必要なので「Build&Run」して、2プレイヤーで打ち合う必要があります。
ゲームオーバーを実装し、勝ち負けをつけられたということで
これでオンラインゲームは完成した!と言ってよいでしょう^^
ただ、このままでは物足りないので、
次の記事では、サウンドつけてみましょう^^