2024-10-17 17:23:05 +03:00

40 lines
1.1 KiB
C#

// idle object that rarely gets dirty
using UnityEngine;
namespace Mirror.Examples.BenchmarkIdle
{
public class Npc : NetworkBehaviour
{
// component to assign in inspector
public Renderer rend;
// the value to set dirty
[SyncVar] ulong value;
[Tooltip("Probability that this object just sleeps the whole time without ever getting dirty. (Npcs, Item drops, etc.)")]
[Range(0, 1)] public float sleepingProbability = 0.80f; // 80% of the objects are sleeping
bool sleeping;
[Header("Colors")]
public Color activeColor = Color.white;
public Color sleepingColor = Color.red;
public override void OnStartServer()
{
sleeping = Random.value < sleepingProbability;
// color coding
// can't do this in update, it's too expensive
rend.material.color = sleeping ? sleepingColor : activeColor;
}
[ServerCallback]
void Update()
{
// set dirty if not sleeping.
// only counts as dirty every 'syncInterval'.
if (!sleeping) ++value;
}
}
}