40 lines
1.1 KiB
C#
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|