You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.7 KiB
C#

1 week ago
using System;
using System.Collections.Generic;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Unity.Multiplayer.Samples.Utilities
{
public class NetworkObjectSpawner : MonoBehaviour
{
public NetworkObject prefabReference;
public void Awake()
{
if (NetworkManager.Singleton && NetworkManager.Singleton.IsServer &&
NetworkManager.Singleton.SceneManager != null)
{
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted += SceneManagerOnOnLoadEventCompleted;
}
else
{
Destroy(gameObject);
}
}
void OnDestroy()
{
if (NetworkManager.Singleton && NetworkManager.Singleton.IsServer &&
NetworkManager.Singleton.SceneManager != null)
{
NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= SceneManagerOnOnLoadEventCompleted;
}
}
void SceneManagerOnOnLoadEventCompleted(string sceneName, LoadSceneMode loadSceneMode, List<ulong> clientsCompleted, List<ulong> clientsTimedOut)
{
SpawnNetworkObject();
Destroy(gameObject);
}
void SpawnNetworkObject()
{
var instantiatedNetworkObject = Instantiate(prefabReference, transform.position, transform.rotation, null);
SceneManager.MoveGameObjectToScene(instantiatedNetworkObject.gameObject,
SceneManager.GetSceneByName(gameObject.scene.name));
instantiatedNetworkObject.transform.localScale = transform.lossyScale;
instantiatedNetworkObject.Spawn(destroyWithScene: true);
}
}
}