Implement player network spawning and position synchronization

This commit is contained in:
2024-08-25 17:43:19 +02:00
parent 6e037b4d06
commit b05cab8288
30 changed files with 689 additions and 26 deletions

View File

@@ -0,0 +1,54 @@
using Sirenix.OdinInspector;
using System.Collections;
using System.Collections.Generic;
using Unity.Netcode;
using UnityEngine;
using Zenject;
public class ConnectionManager : NetworkBehaviour
{
[SerializeField]
private NetworkManager networkManager;
[Inject]
[SerializeField]
[ReadOnly]
private GameManager gameManager;
private void Start()
{
networkManager.OnClientConnectedCallback += OnClientConnectedCallback;
networkManager.OnClientDisconnectCallback += OnClientDisconnectCallback;
}
private void OnClientConnectedCallback(ulong clientId)
{
Debug.Log($"Client-{clientId} is connected and can spawn {nameof(NetworkObject)}s.");
if (networkManager.LocalClientId == clientId)
{
StartCoroutine(SpawnLocalPlayer());
}
}
private IEnumerator SpawnLocalPlayer()
{
yield return new WaitForEndOfFrame();
var playerObject = networkManager.LocalClient.PlayerObject;
var player = playerObject.GetComponent<PlayerComponent>();
player.gameManager = gameManager;
gameManager.PlayerSpawnedOnNetwork(player);
yield return null;
}
private void OnClientDisconnectCallback(ulong clientId)
{
Debug.Log($"Client-{clientId} is disconnected and can spawn {nameof(NetworkObject)}s.");
if (networkManager.LocalClientId == clientId)
{
}
}
}