mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 11:00:32 +00:00
58 lines
1.4 KiB
Markdown
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);
|
||
|
}
|
||
|
}
|
||
|
```
|