Add NGO networking with owner-authoritative player position sync
Install Netcode for GameObjects 2.13.0 + Unity Transport 2.6.0 and wire up the first networking milestone: syncing player position/rotation across clients. - NetworkBootstrap: Host/Client/Server controls (OnGUI + H/C hotkeys) for local clone testing over loopback 127.0.0.1:7777. - NetworkPlayerSetup: per-avatar owner gating. The local owner binds the GameModeManager and cameras to itself; remote avatars disable their controller/CharacterController and receive transform via NetworkTransform. - GameModeManager.BindLocalPlayer: central runtime rebind to the locally spawned player. - FirstPersonController.SetPlayer: explicit runtime rebind hook. - Player prefab: NetworkObject + NetworkTransform (owner-authoritative, position + rotation) + NetworkPlayerSetup; registered as PlayerPrefab. - Scene: NetworkManager + UnityTransport added; the fixed scene player instance removed in favor of spawn-on-connect. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
c0ec65058b
commit
4fa443f630
13 files changed
+435
-91
No files matched your search
@@ -0,0 +1,32 @@
|
||||
using Unity.Netcode;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// Per-avatar network glue on the spawned player. The local owner binds the scene singletons
|
||||
/// (GameModeManager, cameras) to itself via <see cref="GameModeManager.BindLocalPlayer"/>; remote
|
||||
/// avatars stop simulating so their transform is driven purely by the NetworkTransform replication.
|
||||
/// Position-sync milestone: remote avatars still show their mesh/idle pose, just no local control.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(PlayerCharacterController))]
|
||||
[DisallowMultipleComponent]
|
||||
public class NetworkPlayerSetup : NetworkBehaviour
|
||||
{
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
var controller = GetComponent<PlayerCharacterController>();
|
||||
|
||||
if (IsOwner)
|
||||
{
|
||||
var manager = FindFirstObjectByType<GameModeManager>(FindObjectsInactive.Include);
|
||||
if (manager)
|
||||
manager.BindLocalPlayer(controller);
|
||||
return;
|
||||
}
|
||||
|
||||
// Remote avatar: NetworkTransform owns the transform here, so disable the local
|
||||
// simulation (input/movement) and the CharacterController's own depenetration.
|
||||
if (controller) controller.enabled = false;
|
||||
var cc = GetComponent<CharacterController>();
|
||||
if (cc) cc.enabled = false;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user