Reimplement solo and mp rig switching
This commit is contained in:
@@ -993,7 +993,7 @@ namespace HurricaneVR.Framework.ControllerInput
|
||||
#else
|
||||
loaders = string.Join(",", XRGeneralSettings.Instance.Manager.loaders.Select(e => e.name));
|
||||
#endif
|
||||
Debug.Log($"{XRGeneralSettings.Instance.Manager.automaticLoading}");
|
||||
//Debug.Log($"{XRGeneralSettings.Instance.Manager.automaticLoading}");
|
||||
Debug.Log($"XRGeneralSettings.Instance.Manager.isInitializationComplete {XRGeneralSettings.Instance.Manager.isInitializationComplete}");
|
||||
Debug.Log($"XRPlugin Detected | XRSettings.enabled {XRSettings.enabled} | Loader : {XRPluginLoader} | Loaders Enabled: {loaders}");
|
||||
|
||||
|
||||
@@ -44,7 +44,16 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: d357a0b6e2db94a4aadef95ef4fff758, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
soloRig: {fileID: 0}
|
||||
multiplayerRig: {fileID: 0}
|
||||
rigPrefab: {fileID: 75161255762383020, guid: 1ef3259331ddc1f4d94b628323ec45f3, type: 3}
|
||||
player: {fileID: 0}
|
||||
networkManager: {fileID: 0}
|
||||
autoConnectOrHost: 0
|
||||
OnConnected:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
OnDisconnected:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
OnClientsChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
|
||||
@@ -21,22 +21,22 @@ PrefabInstance:
|
||||
- target: {fileID: 2723252326716659909, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2723252326716659909, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2723252326716659909, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 148
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2723252326716659909, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
value: 148
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2723252326716659909, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
@@ -46,7 +46,7 @@ PrefabInstance:
|
||||
- target: {fileID: 2723252326716659909, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
value: -280
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3680965801110432182, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
@@ -71,22 +71,22 @@ PrefabInstance:
|
||||
- target: {fileID: 6236588919629483555, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6236588919629483555, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6236588919629483555, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 148
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6236588919629483555, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
value: 148
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6236588919629483555, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
@@ -96,27 +96,27 @@ PrefabInstance:
|
||||
- target: {fileID: 6236588919629483555, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
value: -280
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6353877099413377020, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6353877099413377020, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6353877099413377020, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 148
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6353877099413377020, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
value: 148
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6353877099413377020, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
@@ -126,27 +126,27 @@ PrefabInstance:
|
||||
- target: {fileID: 6353877099413377020, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
value: -206
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6413800453266084155, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6413800453266084155, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchorMin.y
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6413800453266084155, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 148
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6413800453266084155, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 0
|
||||
value: 148
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6413800453266084155, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
@@ -156,7 +156,7 @@ PrefabInstance:
|
||||
- target: {fileID: 6413800453266084155, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
value: -280
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7749079862415865764, guid: f871c3b28fd786d4f820bea343f67979,
|
||||
type: 3}
|
||||
@@ -275,7 +275,7 @@ PrefabInstance:
|
||||
- target: {fileID: 3822188217954140599, guid: 6974999791dc8804fafee05e319aa932,
|
||||
type: 3}
|
||||
propertyPath: m_Enabled
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 3924027509007222391, guid: 6974999791dc8804fafee05e319aa932,
|
||||
type: 3}
|
||||
@@ -622,7 +622,7 @@ MonoBehaviour:
|
||||
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
GlobalObjectIdHash: 918221477
|
||||
GlobalObjectIdHash: 3394388680
|
||||
InScenePlacedSourceGlobalObjectIdHash: 0
|
||||
AlwaysReplicateAsRoot: 0
|
||||
SynchronizeTransform: 1
|
||||
|
||||
@@ -2810,37 +2810,6 @@ Transform:
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 212601291}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &216372457
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 216372458}
|
||||
m_Layer: 0
|
||||
m_Name: Character_Sample_04 (1)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!4 &216372458
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 216372457}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1001 &217767396
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -4507,37 +4476,6 @@ PrefabInstance:
|
||||
m_AddedGameObjects: []
|
||||
m_AddedComponents: []
|
||||
m_SourcePrefab: {fileID: 100100000, guid: 693918f5252cc9543ad4901c66a265ed, type: 3}
|
||||
--- !u!1 &310335279
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 310335280}
|
||||
m_Layer: 0
|
||||
m_Name: Character_Sample_04
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!4 &310335280
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 310335279}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1001 &313084521
|
||||
PrefabInstance:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -11368,37 +11306,6 @@ Transform:
|
||||
type: 3}
|
||||
m_PrefabInstance: {fileID: 845377780}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
--- !u!1 &856515704
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 856515705}
|
||||
m_Layer: 0
|
||||
m_Name: InputField_Icon_Lock
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!4 &856515705
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 856515704}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &857455115
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -35379,6 +35286,3 @@ SceneRoots:
|
||||
- {fileID: 3091828949070161056}
|
||||
- {fileID: 2770940432321735806}
|
||||
- {fileID: 2097484082}
|
||||
- {fileID: 856515705}
|
||||
- {fileID: 310335280}
|
||||
- {fileID: 216372458}
|
||||
|
||||
@@ -11,9 +11,14 @@ using Unity.Netcode.Components;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
using Zenject;
|
||||
|
||||
public class PlayerComponent : NetworkBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
[Inject]
|
||||
private HVRInputModule inputModule;
|
||||
|
||||
[SerializeField]
|
||||
private NetworkObject networkObject;
|
||||
|
||||
@@ -45,46 +50,61 @@ public class PlayerComponent : NetworkBehaviour
|
||||
public Vector3 Rotation => controller.Camera.forward;
|
||||
|
||||
private bool isSoloRig => !networkObject.IsPlayerObject;
|
||||
private bool isMultiplayerLocalRig => networkObject.IsLocalPlayer;
|
||||
private bool isLocalRig => networkObject.IsLocalPlayer;
|
||||
|
||||
private bool isMultiplayerRemoteRig => !networkObject.IsOwner && networkObject.IsPlayerObject;
|
||||
private bool isRemoteRig => !networkObject.IsOwner && networkObject.IsPlayerObject;
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
base.OnNetworkSpawn();
|
||||
// Teleport information after player is loaded into scene
|
||||
private Vector3 teleportPosition;
|
||||
private Vector3 teleportRotation;
|
||||
private bool teleportAfterLoad;
|
||||
|
||||
if (!isSoloRig)
|
||||
{
|
||||
name = $"Player - {networkObject.OwnerClientId}"
|
||||
+ (networkObject.IsLocalPlayer ? " (local)" : "");
|
||||
}
|
||||
|
||||
if (isMultiplayerRemoteRig)
|
||||
{
|
||||
StartCoroutine(DestroyMultiplayerComponents());
|
||||
}
|
||||
}
|
||||
private bool isLoaded;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
this.Inject();
|
||||
|
||||
StartCoroutine(AddDontDestroyToDependencies());
|
||||
|
||||
if (isSoloRig || isMultiplayerLocalRig)
|
||||
if (isSoloRig)
|
||||
{
|
||||
foreach (var pointer in GetComponentsInChildren<HVRUIPointer>())
|
||||
{
|
||||
HVRInputModule.Instance.AddPointer(pointer);
|
||||
}
|
||||
AddPointersToInputModule();
|
||||
|
||||
name = "Player - SP";
|
||||
|
||||
StartCoroutine(DestroyComponentsNotNeededForSolo());
|
||||
DontDestroyOnLoad(gameObject);
|
||||
}
|
||||
else if (isLocalRig)
|
||||
{
|
||||
AddPointersToInputModule();
|
||||
|
||||
name = $"Player - MP {networkObject.OwnerClientId} (local)";
|
||||
}
|
||||
else if (isRemoteRig)
|
||||
{
|
||||
name = $"Player - MP {networkObject.OwnerClientId}";
|
||||
StartCoroutine(DestroyComponentsNotNeededForRemoteRigs());
|
||||
}
|
||||
|
||||
if (!isSoloRig) return;
|
||||
isLoaded = true;
|
||||
|
||||
audioListener.enabled = true;
|
||||
StartCoroutine(DestroySoloComponents());
|
||||
DontDestroyOnLoad(gameObject);
|
||||
if (teleportAfterLoad)
|
||||
{
|
||||
Teleport(teleportPosition, teleportRotation);
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator DestroyMultiplayerComponents()
|
||||
private void AddPointersToInputModule()
|
||||
{
|
||||
foreach (var pointer in GetComponentsInChildren<HVRUIPointer>())
|
||||
{
|
||||
inputModule.AddPointer(pointer);
|
||||
}
|
||||
}
|
||||
|
||||
private IEnumerator DestroyComponentsNotNeededForRemoteRigs()
|
||||
{
|
||||
yield return new WaitForEndOfFrame();
|
||||
|
||||
@@ -105,7 +125,7 @@ public class PlayerComponent : NetworkBehaviour
|
||||
controller.RemoveMultiplayerComponents();
|
||||
}
|
||||
|
||||
private IEnumerator DestroySoloComponents()
|
||||
private IEnumerator DestroyComponentsNotNeededForSolo()
|
||||
{
|
||||
yield return new WaitForEndOfFrame();
|
||||
|
||||
@@ -140,26 +160,18 @@ public class PlayerComponent : NetworkBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
public void ToggleAudioListener(bool enabled) => audioListener.enabled = enabled;
|
||||
|
||||
public void Toggle(bool active)
|
||||
{
|
||||
// Only toggle solo rig components, not multiplayer one
|
||||
if (networkObject == null || isSoloRig)
|
||||
{
|
||||
foreach (var d in dependencies)
|
||||
{
|
||||
d.SetActive(active);
|
||||
}
|
||||
|
||||
audioListener.enabled = active;
|
||||
gameObject.SetActive(active);
|
||||
}
|
||||
}
|
||||
|
||||
public void Teleport(Vector3 position, Vector3 direction)
|
||||
{
|
||||
teleporter.Teleport(position, direction);
|
||||
if (isLoaded)
|
||||
{
|
||||
teleporter.Teleport(position, direction);
|
||||
}
|
||||
else
|
||||
{
|
||||
teleportPosition = position;
|
||||
teleportRotation = direction;
|
||||
teleportAfterLoad = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void FadeScreen(float to, float duration)
|
||||
|
||||
@@ -24,9 +24,6 @@ public class GlobalInstaller : MonoInstaller
|
||||
[SerializeField]
|
||||
private GameObject gameManagerPrefab;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject playerPrefab;
|
||||
|
||||
[SerializeField]
|
||||
private GameObject uiManagerPrefab;
|
||||
|
||||
@@ -81,13 +78,6 @@ public class GlobalInstaller : MonoInstaller
|
||||
Container.BindInstance(networkManager)
|
||||
.AsSingle();
|
||||
|
||||
var playerGO = Instantiate(playerPrefab);
|
||||
playerGO.name = playerPrefab.name;
|
||||
var playerComponent = playerGO.GetComponent<PlayerComponent>();
|
||||
|
||||
Container.BindInstance(playerComponent)
|
||||
.AsSingle();
|
||||
|
||||
Container.Bind<HVRInputModule>()
|
||||
.FromComponentInNewPrefab(uiManagerPrefab)
|
||||
.AsSingle()
|
||||
|
||||
@@ -10,15 +10,13 @@ using System.Collections.Generic;
|
||||
public class GameManager : NetworkBehaviour
|
||||
{
|
||||
[SerializeField]
|
||||
[ReadOnly]
|
||||
[Inject]
|
||||
private PlayerComponent soloRig;
|
||||
private GameObject rigPrefab;
|
||||
|
||||
[SerializeField]
|
||||
[ReadOnly]
|
||||
private PlayerComponent multiplayerRig;
|
||||
private PlayerComponent player;
|
||||
|
||||
public PlayerComponent LocalPlayer => multiplayerRig ?? soloRig;
|
||||
public PlayerComponent LocalPlayer => player;
|
||||
|
||||
[SerializeField]
|
||||
[ReadOnly]
|
||||
@@ -43,6 +41,8 @@ public class GameManager : NetworkBehaviour
|
||||
networkManager.OnClientConnectedCallback += OnClientConnectedCallback;
|
||||
networkManager.OnClientDisconnectCallback += OnClientDisconnectCallback;
|
||||
|
||||
player = SpawnSoloRig();
|
||||
|
||||
if (autoConnectOrHost)
|
||||
{
|
||||
if (ClonesManager.IsClone())
|
||||
@@ -56,6 +56,11 @@ public class GameManager : NetworkBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
private PlayerComponent SpawnSoloRig()
|
||||
{
|
||||
return Instantiate(rigPrefab).GetComponent<PlayerComponent>();
|
||||
}
|
||||
|
||||
public void JoinGame(string code)
|
||||
{
|
||||
networkManager.StartClient();
|
||||
@@ -107,23 +112,25 @@ public class GameManager : NetworkBehaviour
|
||||
{
|
||||
yield return new WaitForEndOfFrame();
|
||||
|
||||
var position = player.Position;
|
||||
var rotation = player.Rotation;
|
||||
player.DestroyDependencies();
|
||||
|
||||
if (toSolo)
|
||||
{
|
||||
soloRig.Toggle(toSolo);
|
||||
soloRig.Teleport(multiplayerRig.Position, multiplayerRig.Rotation);
|
||||
multiplayerRig.DestroyDependencies();
|
||||
multiplayerRig = null;
|
||||
yield return new WaitForEndOfFrame();
|
||||
player = SpawnSoloRig();
|
||||
}
|
||||
else
|
||||
{
|
||||
soloRig.Toggle(toSolo);
|
||||
|
||||
Destroy(player.gameObject);
|
||||
yield return new WaitForEndOfFrame();
|
||||
var playerObject = networkManager.LocalClient.PlayerObject;
|
||||
multiplayerRig = playerObject.GetComponent<PlayerComponent>();
|
||||
multiplayerRig.Teleport(soloRig.Position, soloRig.Rotation);
|
||||
multiplayerRig.ToggleAudioListener(true);
|
||||
player = playerObject.GetComponent<PlayerComponent>();
|
||||
|
||||
}
|
||||
|
||||
player.Teleport(position, rotation);
|
||||
}
|
||||
|
||||
private void OnClientDisconnectCallback(ulong clientId)
|
||||
|
||||
@@ -70,6 +70,8 @@ public class HandMenuUI : NetworkBehaviour
|
||||
|
||||
private void Start()
|
||||
{
|
||||
this.Inject();
|
||||
|
||||
if (uiInput == null) return;
|
||||
|
||||
canvas = GetComponent<Canvas>();
|
||||
@@ -88,14 +90,6 @@ public class HandMenuUI : NetworkBehaviour
|
||||
settingsButton.onClick.AddListener(() => SettingsClicked());
|
||||
}
|
||||
|
||||
public override void OnNetworkSpawn()
|
||||
{
|
||||
base.OnNetworkSpawn();
|
||||
|
||||
// Player components need to be injected manualy again, because NetworkManager doesn't inject them.
|
||||
gameObject.Inject();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
CheckInput();
|
||||
|
||||
@@ -43,4 +43,9 @@ public static class Injector
|
||||
{
|
||||
LookupContainer(go, container).InjectGameObject(go);
|
||||
}
|
||||
|
||||
public static void Inject(this MonoBehaviour mb, ContainerSources container = ContainerSources.SceneContext)
|
||||
{
|
||||
LookupContainer(mb.gameObject, container).Inject(mb);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user