Implement player network spawning and position synchronization
This commit is contained in:
54
Assets/Scripts/Managers/ConnectionManager.cs
Normal file
54
Assets/Scripts/Managers/ConnectionManager.cs
Normal 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)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user