上一部分我們做的是射擊的部分,說到射擊,肯定和傷害有關,當Player1擊中Player2的時候,將會造成Player2生命值的減少
本部分也較爲容易,我們需要一個新的腳本Player_Health,另外,我們需要對上一次做的Player_Shoot腳本留下的東西做完
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.UI;
public class Player_Health : NetworkBehaviour {
[SyncVar(hook="OnHealthChanged")]private int health = 100;
private Text healthText;
void Start ()
{
healthText = GameObject.Find("Health Text").GetComponent<Text>();
SetHealthText();
}
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;
public class Player_Shoot : NetworkBehaviour {
private int damage = 25;
private float range = 200;
[SerializeField]private Transform camTransform;
private RaycastHit hit;
void Update ()
{
CheckIfShooting();
}
void CheckIfShooting()
{
if (!isLocalPlayer)
{
return;
}
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Shoot();
}
}
void Shoot()
{
if (Physics.Raycast(camTransform.TransformPoint(0, 0, 0.5f), camTransform.forward, out hit, range))
{
//Debug.Log(hit.transform.tag);
if (hit.transform.tag == "Player")
{
string uIdentity = hit.transform.name;
CmdTellServerWhoWasShot(uIdentity, damage);
}
}
}
[Command]
void CmdTellServerWhoWasShot(string uniqueID, int dmg)
{
GameObject go = GameObject.Find(uniqueID);
go.GetComponent<Player_Health>().DeductHealth(dmg);
}
}
當Player1擊中Player2的時候,告訴服務器它擊中的是哪一個Player,然後調用Player_Health腳本中的DeductHealth函數,Player2的生命值減少