Refactor connection handling to game manager
This commit is contained in:
@@ -11,7 +11,6 @@ GameObject:
|
|||||||
- component: {fileID: 3572856719409378894}
|
- component: {fileID: 3572856719409378894}
|
||||||
- component: {fileID: 8614138672144993884}
|
- component: {fileID: 8614138672144993884}
|
||||||
- component: {fileID: 1446823875350840172}
|
- component: {fileID: 1446823875350840172}
|
||||||
- component: {fileID: 4889055508275984978}
|
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: NetworkManager
|
m_Name: NetworkManager
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@@ -100,16 +99,3 @@ MonoBehaviour:
|
|||||||
PacketDelayMS: 0
|
PacketDelayMS: 0
|
||||||
PacketJitterMS: 0
|
PacketJitterMS: 0
|
||||||
PacketDropRate: 0
|
PacketDropRate: 0
|
||||||
--- !u!114 &4889055508275984978
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 8643863892294462044}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: cb16de57aad3ebe42bb3df246dc58d5f, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
networkManager: {fileID: 8614138672144993884}
|
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ using Unity.Netcode.Components;
|
|||||||
using Unity.VisualScripting;
|
using Unity.VisualScripting;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Rendering.Universal;
|
using UnityEngine.Rendering.Universal;
|
||||||
using Zenject;
|
|
||||||
using static Unity.Burst.Intrinsics.X86.Avx;
|
|
||||||
|
|
||||||
public class PlayerComponent : NetworkBehaviour
|
public class PlayerComponent : NetworkBehaviour
|
||||||
{
|
{
|
||||||
@@ -30,9 +28,6 @@ public class PlayerComponent : NetworkBehaviour
|
|||||||
[SerializeField]
|
[SerializeField]
|
||||||
private float fadeDuration = 2f;
|
private float fadeDuration = 2f;
|
||||||
|
|
||||||
[SerializeField]
|
|
||||||
public GameManager gameManager;
|
|
||||||
|
|
||||||
public Vector3 Position
|
public Vector3 Position
|
||||||
{
|
{
|
||||||
get { return controller.transform.position; }
|
get { return controller.transform.position; }
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
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)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: cb16de57aad3ebe42bb3df246dc58d5f
|
|
||||||
MonoImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
||||||
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
|||||||
using Unity.Netcode;
|
using Unity.Netcode;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Zenject;
|
using Zenject;
|
||||||
|
using ParrelSync;
|
||||||
|
|
||||||
public class GameManager : NetworkBehaviour
|
public class GameManager : NetworkBehaviour
|
||||||
{
|
{
|
||||||
@@ -15,13 +16,53 @@ public class GameManager : NetworkBehaviour
|
|||||||
get { return localPlayer; }
|
get { return localPlayer; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PlayerSpawnedOnNetwork(PlayerComponent player)
|
[SerializeField]
|
||||||
|
[ReadOnly]
|
||||||
|
[Inject]
|
||||||
|
private NetworkManager networkManager;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
{
|
{
|
||||||
if (player.IsLocalPlayer)
|
networkManager.OnClientConnectedCallback += OnClientConnectedCallback;
|
||||||
|
networkManager.OnClientDisconnectCallback += OnClientDisconnectCallback;
|
||||||
|
|
||||||
|
if (ClonesManager.IsClone())
|
||||||
{
|
{
|
||||||
player.Teleport(localPlayer.Position, localPlayer.Rotation);
|
networkManager.StartClient();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
networkManager.StartHost();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 position = localPlayer.Position;
|
||||||
|
var rotation = localPlayer.Rotation;
|
||||||
localPlayer.DestroyWithDependencies();
|
localPlayer.DestroyWithDependencies();
|
||||||
|
|
||||||
|
var playerObject = networkManager.LocalClient.PlayerObject;
|
||||||
|
var player = playerObject.GetComponent<PlayerComponent>();
|
||||||
|
player.Teleport(position, rotation);
|
||||||
localPlayer = player;
|
localPlayer = player;
|
||||||
}
|
yield return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnClientDisconnectCallback(ulong clientId)
|
||||||
|
{
|
||||||
|
Debug.Log($"Client-{clientId} is disconnected");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,11 @@ using Sirenix.OdinInspector;
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Unity.Netcode;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Zenject;
|
using Zenject;
|
||||||
|
|
||||||
public class LevelManager : MonoBehaviour
|
public class LevelManager : NetworkBehaviour
|
||||||
{
|
{
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
[ReadOnly]
|
[ReadOnly]
|
||||||
|
|||||||
@@ -2,11 +2,12 @@ using HurricaneVR.Framework.Core.Player;
|
|||||||
using Sirenix.OdinInspector;
|
using Sirenix.OdinInspector;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using Unity.Netcode;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.SceneManagement;
|
using UnityEngine.SceneManagement;
|
||||||
using Zenject;
|
using Zenject;
|
||||||
|
|
||||||
public class SceneManager : MonoBehaviour
|
public class SceneManager : NetworkBehaviour
|
||||||
{
|
{
|
||||||
enum Scene
|
enum Scene
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user