示例#1
0
        public static Scene CreateContainer(string name, LocalPhysicsMode physics = LocalPhysicsMode.None)
        {
            Scene fScene = SceneManager.GetSceneByName(name);

            if (!fScene.IsValid())
            {
                return(SceneManager.CreateScene(name, new CreateSceneParameters(physics)));
            }
            else
            {
                return(default);
示例#2
0
        public void SubmitLoadingRequest(bool asynchronous, LocalPhysicsMode localPhysicsMode, bool setActive)
        {
            _loadRequests++;
            if (_loadRequests > 1)
            {
                return;
            }

            var loadSceneParameters = new LoadSceneParameters(LoadSceneMode.Additive, localPhysicsMode);

            if (asynchronous)
            {
                var operation = SceneManager.LoadSceneAsync(buildIndex, loadSceneParameters);

                operation.completed += o =>
                {
                    if (!o.isDone)
                    {
                        return;
                    }
                    var scene = SceneManager.GetSceneByBuildIndex(buildIndex);
                    if (setActive)
                    {
                        SceneManager.SetActiveScene(scene);
                    }
                };
            }
            else
            {
                var scene = SceneManager.LoadScene(buildIndex, loadSceneParameters);
                if (setActive)
                {
                    HiraCoroutines.Instance.StartCoroutine(SetActiveScene(scene));
                }
            }
        }
示例#3
0
        public LocalPhysicsMode physicsMode; // None = 0, Physics3D = 1, Physics2D = 2

        public override void Deserialize(NetworkReader reader)
        {
            sceneName   = reader.ReadString();
            sceneMode   = (LoadSceneMode)reader.ReadByte();
            physicsMode = (LocalPhysicsMode)reader.ReadByte();
        }
示例#4
0
        internal void ClientChangeScene(string newSceneName, bool forceReload, LoadSceneMode sceneMode, LocalPhysicsMode physicsMode)
        {
            if (string.IsNullOrEmpty(newSceneName))
            {
                Debug.LogError("ClientChangeScene empty scene name");
                return;
            }

            if (LogFilter.Debug)
            {
                Debug.Log("ClientChangeScene newSceneName:" + newSceneName + " networkSceneName:" + networkSceneName);
            }

            if (newSceneName == networkSceneName)
            {
                if (!forceReload)
                {
                    FinishLoadScene();
                    return;
                }
            }

            // vis2k: pause message handling while loading scene. otherwise we will process messages and then lose all
            // the state as soon as the load is finishing, causing all kinds of bugs because of missing state.
            // (client may be null after StopClient etc.)
            if (LogFilter.Debug)
            {
                Debug.Log("ClientChangeScene: pausing handlers while scene is loading to avoid data loss after scene was loaded.");
            }
            Transport.activeTransport.enabled = false;

            // Let client prepare for scene change
            OnClientChangeScene(newSceneName);

            loadingSceneAsync = SceneManager.LoadSceneAsync(newSceneName, new LoadSceneParameters()
            {
                loadSceneMode    = sceneMode,
                localPhysicsMode = physicsMode,
            });
            networkSceneName = newSceneName; //This should probably not change if additive is used
        }
示例#5
0
        public virtual void ServerChangeScene(string newSceneName, LoadSceneMode sceneMode, LocalPhysicsMode physicsMode)
        {
            if (string.IsNullOrEmpty(newSceneName))
            {
                Debug.LogError("ServerChangeScene empty scene name");
                return;
            }

            if (LogFilter.Debug)
            {
                Debug.Log("ServerChangeScene " + newSceneName);
            }
            NetworkServer.SetAllClientsNotReady();
            networkSceneName = newSceneName;

            LoadSceneParameters loadSceneParameters = new LoadSceneParameters(sceneMode, physicsMode);

            loadingSceneAsync = SceneManager.LoadSceneAsync(newSceneName, loadSceneParameters);

            SceneMessage msg = new SceneMessage()
            {
                sceneName   = newSceneName,
                sceneMode   = loadSceneParameters.loadSceneMode,
                physicsMode = loadSceneParameters.localPhysicsMode
            };

            NetworkServer.SendToAll(msg);

            startPositionIndex = 0;
            startPositions.Clear();
        }
 public SceneLoadParameters(LoadSceneMode addMode, LocalPhysicsMode physicsMode, bool allowActivation = true)
 {
     m_addMode         = addMode;
     m_physicsMode     = physicsMode;
     m_allowActivation = allowActivation;
 }
示例#7
0
 public CreateSceneParameters(LocalPhysicsMode physicsMode)
 {
     m_LocalPhysicsMode = physicsMode;
 }
示例#8
0
 public LoadSceneParameters(LoadSceneMode mode, LocalPhysicsMode physicsMode)
 {
     m_LoadSceneMode    = mode;
     m_LocalPhysicsMode = physicsMode;
 }
示例#9
0
 public LoadSceneParameters(LoadSceneMode mode)
 {
     m_LoadSceneMode    = mode;
     m_LocalPhysicsMode = LocalPhysicsMode.None;
 }
示例#10
0
 public static ISceneLoadPromise LoadAsync(string sceneName, LoadSceneMode mode = LoadSceneMode.Additive, LocalPhysicsMode localPhysicsMode = LocalPhysicsMode.Physics3D)
 {
     return(Load(sceneName, new SceneLoadSettings()
     {
         Async = true, LoadSceneMode = mode, LocalPhysicsMode = localPhysicsMode
     }));
 }
示例#11
0
 public void ChangeScene(string sceneName, LoadSceneMode sceneMode, LocalPhysicsMode physicsMode)
 {
     netMan.ServerChangeScene(sceneName, sceneMode, physicsMode);
 }