using Unity.Netcode.Components; using UnityEngine; namespace Unity.Netcode.Samples { /// /// Used for syncing a transform with client side changes. This includes host. Pure server as owner isn't supported by this. Please use NetworkTransform /// for transforms that'll always be owned by the server. /// [DisallowMultipleComponent] public class ClientNetworkTransform : NetworkTransform { /// /// Used to determine who can write to this transform. Owner client only. /// Changing this value alone will not allow you to create a NetworkTransform which can be written to by clients. /// We're using RPCs to send updated values from client to server. Netcode doesn't support client side network variable writing. /// This imposes state to the server. This is putting trust on your clients. Make sure no security-sensitive features use this transform. /// // This is public to make sure that users don't depend on this IsClient && IsOwner check in their code. If this logic changes in the future, we can make it invisible here public override void OnNetworkSpawn() { base.OnNetworkSpawn(); CanCommitToTransform = IsOwner; } protected override void Update() { base.Update(); if (NetworkManager.Singleton != null && (NetworkManager.Singleton.IsConnectedClient || NetworkManager.Singleton.IsListening)) { if (CanCommitToTransform) { TryCommitTransformToServer(transform, NetworkManager.LocalTime.Time); } } } } }