public class NetworkAnimal : NetworkBehaviour{
[Networked]
TickTimer cooldownTimer { get; set; }
[Networked]
public float currentHealth { get; set; }
public bool canAttack => cooldownTimer.ExpiredOrNotRunning(Runner);
[Rpc (RpcSources.All, RpcTargets.StateAuthority, HostMode = RpcHostMode.SourceIsHostPlayer)]
public void RPC_Damage(float damage, NetworkObject networkObject,RpcInfo info = default)
{
if (canAttack && networkObject.TryGetComponent<IBeDamaged>(out var beDamagedObj))
{
beDamagedObj.BeDamaged(damage);
cooldownTimer = TickTimer.CreateFromSeconds(Runner, cooldownTime);
}
}
public override void Render()
{
base.Render();
bloodBar.UpdateBloodInfo(currentHealth, maxHealth);
}
}
前面提到諸多概念如已連網屬性、RPC、FixedUpdateNetwork()皆都是在Network Behaviour中使用,而Network Behaviour都會在NetworkObject底下中生效,可以說Network Behaviour就是為了網路行為而生的。
Network Behaviour有著NetworkBehaviourId,作為網路物件的識別。
由於Fusion是基於網路固定刷新,以固定時間模擬結果,但如果在此狀態下使用Update()則會十分不穩定,因為Update可能會在兩個FixedUpdateNetwork()之間有多個更新,但使用Render()便會穩定在FixedUpdateNetwork()結束後刷新。