Mirror/docs/Classes/SyncVarHook.md
2019-01-07 12:40:30 -06:00

58 lines
1.4 KiB
Markdown

# SyncVar Hook
The hook attribute can be used to specify a function to be called when the SyncVar changes value on the client.
This ensures that all clients receive the proper variables from other clients.
```cs
using UnityEngine;
using UnityEngine.Networking;
public class Health : NetworkBehaviour
{
public const int m_MaxHealth = 100;
//Detects when a health change happens and calls the appropriate function
[SyncVar(hook = "OnChangeHealth")]
public int m_CurrentHealth = m_MaxHealth;
public RectTransform healthBar;
public void TakeDamage(int amount)
{
if (!isServer)
return;
//Decrease the "health" of the GameObject
m_CurrentHealth -= amount;
//Make sure the health doesn't go below 0
if (m_CurrentHealth <= 0)
{
m_CurrentHealth = 0;
}
}
void Update()
{
//If the space key is pressed, decrease the GameObject's own "health"
if (Input.GetKey(KeyCode.Space))
{
if (isLocalPlayer)
CmdTakeHealth();
}
}
void OnChangeHealth(int health)
{
healthBar.sizeDelta = new Vector2(health, healthBar.sizeDelta.y);
}
//This is a Network command, so the damage is done to the relevant GameObject
[Command]
void CmdTakeHealth()
{
//Apply damage to the GameObject
TakeDamage(2);
}
}
```