上一个部分做了玩家的射击造成的伤害,但是玩家生命值为负的时候玩家还在游戏场景上,这个部分我们将要把生命值为0以下的玩家摧毁掉
主要的思路就是当玩家的生命值小于或等于0的时候,将玩家的控制和渲染都设置为不可用即可
将Player_Health脚本做下修改
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.UI;
public class Player_Health : NetworkBehaviour {
//玩家的生命值,当生命值的数值发生变化时调用OnHealthChanged函数
[SyncVar(hook="OnHealthChanged")]private int health = 100;
//右下角显示生命值的Text
private Text healthText;
//判断玩家是否死亡的两个bool变量
private bool shouldDie = false;
public bool isDead = false;
public delegate void DieDelegate();
public event DieDelegate EventDie;
void Start ()
{
healthText = GameObject.Find("Health Text").GetComponent<Text>();
SetHealthText();
}
void Update ()
{
CheckCondition();
}
//检查条件
void CheckCondition()
{
if (health <= 0 && !shouldDie&&!isDead)
{
shouldDie = true;
}
if (health <= 0 && shouldDie)
{
if (EventDie != null)
{
EventDie();
}
shouldDie = false;
}
}
//设置生命值Text的内容
void SetHealthText()
{
if (isLocalPlayer)
{
healthText.text = "Health " + health.ToString();
}
}
//生命值减少
public void DeductHealth(int dmg)
{
health -= dmg;
}
//生命值改变
void OnHealthChanged(int hlth)
{
health = hlth;
SetHealthText();
}
}
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.UI;
public class Player_Death : NetworkBehaviour {
private Player_Health healthScript;
//画面中心的小红点
private Image crossHairImage;
void Start ()
{
crossHairImage = GameObject.Find("crossHairImage").GetComponent<Image>();
healthScript = GetComponent<Player_Health>();
healthScript.EventDie += DisablePlayer;
}
void OnDisable()
{
healthScript.EventDie -= DisablePlayer;
}
//将Player的相关控制和渲染设置成不可用状态,以代表摧毁Player
void DisablePlayer()
{
GetComponent<CharacterController>().enabled=false;
GetComponent<Player_Shoot>().enabled = false;
GetComponent<BoxCollider>().enabled = false;
Renderer[] renderers = GetComponentsInChildren<Renderer>();
foreach (Renderer ren in renderers)
{
ren.enabled = false;
}
healthScript.isDead = true;
if (isLocalPlayer)
{
GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().enabled = false;
crossHairImage.enabled = false;
//Respawan button 预留重生按钮,下个部分做
}
}
}
其中用到了一个委托的方法,因为对委托不是很熟悉,也就不多说些误人子弟的话了。
按着某人的建议写了点注释= =为什么感觉那么鸡肋呢。。。