示例#1
0
        //========================================================================================

#if UNITY_EDITOR
        private void Update()
        {
            if (Application.isPlaying)
            {
                return;
            }

            string subSceneName = WorldUtility.GetSubSceneRootName(subSceneMode, subSceneType);
            if (name != subSceneName)
            {
                name = subSceneName;
            }
        }
示例#2
0
        void IRegionEventHandler.CreateSubScene(eSubSceneMode subSceneMode, eSubSceneType subSceneType)
        {
            string subScenePath = WorldUtility.GetSubScenePath(gameObject.scene.path, Id, subSceneMode, subSceneType);
            string subScenePathFull = WorldUtility.GetFullPath(subScenePath);

            if (GetSubSceneRoot(subSceneType) != null)
            {
                return;
            }
            else if (System.IO.File.Exists(subScenePathFull))
            {
                Debug.LogFormat("SubScene \"{0}\" already exists but is not loaded!", subScenePath);
                return;
            }
            else
            {
                var rootGO = new GameObject(WorldUtility.GetSubSceneRootName(subSceneMode, subSceneType), typeof(SubScene));
                rootGO.GetComponent<SubScene>().Initialize(subSceneMode, subSceneType);

                var root = rootGO.transform;
                root.SetParent(transform, false);
            }
        }
示例#3
0
        public override void OnInspectorGUI()
        {
            //
            List <SubScene> loadedSubScenes = self.GetAllSubScenes();

            //
            //base.OnInspectorGUI();

            EditorGUILayout.LabelField("----");

            boundsSizeProperty.vector3Value = EditorGUILayout.Vector3Field("Bounds Size", boundsSizeProperty.vector3Value);

            EditorGUILayout.LabelField("Render Distances");

            overrideRenderDistanceFarProperty.boolValue = EditorGUILayout.Toggle("  Override Far", overrideRenderDistanceFarProperty.boolValue);

            if (overrideRenderDistanceFarProperty.boolValue)
            {
                localRenderDistanceFarProperty.floatValue = EditorGUILayout.FloatField("  Far", localRenderDistanceFarProperty.floatValue);
            }

            overrideRenderDistanceInactiveProperty.boolValue = EditorGUILayout.Toggle("  Override Inactive", overrideRenderDistanceInactiveProperty.boolValue);

            if (overrideRenderDistanceInactiveProperty.boolValue)
            {
                localRenderDistanceInactiveProperty.floatValue = EditorGUILayout.FloatField("  Inactive", localRenderDistanceInactiveProperty.floatValue);
            }

            EditorGUILayout.LabelField("----");

            drawBoundsProperty.boolValue = EditorGUILayout.Toggle("Draw Bounds", drawBoundsProperty.boolValue);

            if (!Application.isPlaying && self.transform.parent.GetComponent <World>().EditorSubScenesLoaded)
            {
                GUILayout.Label("");

                foreach (var subSceneMode in self.AvailableSubSceneModes)
                {
                    foreach (var subSceneType in Enum.GetValues(typeof(eSubSceneType)).Cast <eSubSceneType>())
                    {
                        if (!self.GetSubSceneRoot(subSceneType, subSceneMode, loadedSubScenes) && GUILayout.Button("Create " + WorldUtility.GetSubSceneRootName(subSceneMode, subSceneType)))
                        {
                            UnityEngine.EventSystems.ExecuteEvents.Execute <IRegionEventHandler>(self.gameObject, null, (x, y) => x.CreateSubScene(subSceneMode, subSceneType));
                        }
                    }
                }

                GUILayout.Label("");
            }

            serializedObject.ApplyModifiedProperties();
        }
示例#4
0
        void IWorldEventHandler.ImportSubScenes()
        {
            if (editorSubScenesLoaded)
            {
                return;
            }

            var regions = new List<RegionBase>();

            for (int i = 0; i < transform.childCount; i++)
            {
                var region = transform.GetChild(i).GetComponent<RegionBase>();

                if (region)
                {
                    regions.Add(region);
                }
            }

            foreach (var region in regions)
            {
                foreach (var subSceneType in Enum.GetValues(typeof(eSubSceneType)).Cast<eSubSceneType>())
                {
                    foreach (var subSceneMode in region.AvailableSubSceneModes)
                    {
                        if (region.GetSubSceneRoot(subSceneType, subSceneMode) != null)
                        {
                            Debug.LogErrorFormat("The \"{0}\" of Region \"{1}\" is already loaded!", WorldUtility.GetSubSceneRootName(subSceneMode, subSceneType), region.name);
                            continue;
                        }

                        //paths
                        string subScenePath = WorldUtility.GetSubScenePath(gameObject.scene.path, region.Id, subSceneMode, subSceneType);
                        string subScenePathFull = WorldUtility.GetFullPath(subScenePath);

                        Scene subScene = new Scene();

                        if (System.IO.File.Exists(subScenePathFull))
                        {
                            subScene = UnityEditor.SceneManagement.EditorSceneManager.OpenScene(subScenePath, UnityEditor.SceneManagement.OpenSceneMode.Additive);
                        }

                        //move subScene content to open world scene
                        if (subScene.IsValid())
                        {
                            var rootGO = subScene.GetRootGameObjects()[0];
                            UnityEditor.SceneManagement.EditorSceneManager.MoveGameObjectToScene(rootGO, this.gameObject.scene);

                            var root = rootGO.transform;
                            root.SetParent(region.transform, false);

                            if (!root.gameObject.activeSelf)
                            {
                                root.gameObject.SetActive(true);
                            }
                        }

                        //end: close subScene
                        UnityEditor.SceneManagement.EditorSceneManager.CloseScene(subScene, true);
                    }
                }
            }


            UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(gameObject.scene);
            editorSubScenesLoaded = true;
        }