예제 #1
0
 private static GameObject[] GetStateGameObjects(StageHandle stageHandle)
 {
     return(stageHandle.FindComponentsOfType <Transform>()
            .Select(x => x.gameObject)
            .Distinct()
            .ToArray());
 }
예제 #2
0
        void AddCameraToCameraList(Rect rect, ReorderableList list)
        {
            StageHandle stageHandle = StageUtility.GetStageHandle(camera.gameObject);
            var         allCameras  = stageHandle.FindComponentsOfType <Camera>();

            foreach (var camera in allCameras)
            {
                var component = camera.gameObject.GetComponent <UniversalAdditionalCameraData>();
                if (component != null)
                {
                    if (validCameraTypes.Contains(component.renderType))
                    {
                        validCameras.Add(camera);
                    }
                }
            }

            var names = new GUIContent[validCameras.Count];

            for (int i = 0; i < validCameras.Count; ++i)
            {
                names[i] = new GUIContent(validCameras[i].name);
            }

            if (!validCameras.Any())
            {
                names    = new GUIContent[1];
                names[0] = new GUIContent("No Overlay Cameras exist.");
            }
            EditorUtility.DisplayCustomMenu(rect, names, -1, AddCameraToCameraListMenuSelected, null);
        }
예제 #3
0
        private static void CreateEventSystem(bool select, GameObject parent)
        {
            StageHandle stage = parent == null?StageUtility.GetCurrentStageHandle() : StageUtility.GetStageHandle(parent);

            var esys = stage.FindComponentOfType <EventSystem>();

            if (esys == null)
            {
                var eventSystem = ObjectFactory.CreateGameObject("EventSystem");
                if (parent == null)
                {
                    StageUtility.PlaceGameObjectInCurrentStage(eventSystem);
                }
                else
                {
                    SetParentAndAlign(eventSystem, parent);
                }
                esys = ObjectFactory.AddComponent <EventSystem>(eventSystem);
                ObjectFactory.AddComponent <StandaloneInputModule>(eventSystem);

                Undo.RegisterCreatedObjectUndo(eventSystem, "Create " + eventSystem.name);
            }

            if (select && esys != null)
            {
                Selection.activeGameObject = esys.gameObject;
            }
        }
예제 #4
0
        private static Canvas GetCanvas()
        {
            StageHandle handle = StageUtility.GetCurrentStageHandle();

            if (!handle.FindComponentOfType <Canvas>())
            {
                EditorApplication.ExecuteMenuItem("GameObject/UI/Canvas");
            }

            Canvas c = handle.FindComponentOfType <Canvas>();

            return(c);
        }
예제 #5
0
    private static void CreateEventSystem()
    {
        StageHandle stage = StageUtility.GetCurrentStageHandle();
        var         esys  = stage.FindComponentOfType <EventSystem>();

        if (esys == null)
        {
            var eventSystem = ObjectFactory.CreateGameObject("EventSystem");
            StageUtility.PlaceGameObjectInCurrentStage(eventSystem);
            esys = ObjectFactory.AddComponent <EventSystem>(eventSystem);
            ObjectFactory.AddComponent <StandaloneInputModule>(eventSystem);

            Undo.RegisterCreatedObjectUndo(eventSystem, "Create " + eventSystem.name);
        }
    }
예제 #6
0
    private static void TrimDrawCalls(PrefabStage prefabStage, StageHandle stageHandleMain, BetterList <UIDrawCall> list, string identifier)
    {
        for (int i = list.size - 1; i >= 0; --i)
        {
            UIDrawCall dc = list[i];
            if (dc == null || !dc.gameObject.BelongsToCurrentStage(prefabStage, stageHandleMain))
            {
                list.RemoveAt(i);
                if (dc != null)
                {
                    UIDrawCall.Destroy(dc);
                }

                if (log)
                {
                    Debug.Log(string.Format("Removing {0} entry {1} from the {2} draw call list", dc == null ? "a null" : "an out of stage", i, identifier));
                }
            }
        }
    }
        static void FetchOrCreateEffectors()
        {
            s_ActiveEffectors = new List <RigEffector>();

            PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage();

            for (int i = 0; i < s_RigBuilders.Count; i++)
            {
                var rigBuilder = s_RigBuilders[i];

                if (rigBuilder == null)
                {
                    continue;
                }

                if (prefabStage != null)
                {
                    StageHandle stageHandle = prefabStage.stageHandle;
                    if (stageHandle.IsValid() && !stageHandle.Contains(rigBuilder.gameObject))
                    {
                        continue;
                    }
                }

                FetchOrCreateEffectors(rigBuilder);

                var rigs = rigBuilder.GetComponentsInChildren <Rig>();
                if (rigs != null)
                {
                    foreach (var rig in rigs)
                    {
                        FetchOrCreateEffectors(rig);
                    }
                }
            }
        }
예제 #8
0
        static void DrawSkeletons(SceneView sceneview)
        {
            var gizmoColor = Gizmos.color;

            pyramidMeshRenderer.Clear();
            boxMeshRenderer.Clear();

            for (var i = 0; i < s_BoneRendererComponents.Count; i++)
            {
                var boneRenderer = s_BoneRendererComponents[i];

                if (boneRenderer.bones == null)
                {
                    continue;
                }

                PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage();
                if (prefabStage != null)
                {
                    StageHandle stageHandle = prefabStage.stageHandle;
                    if (stageHandle.IsValid() && !stageHandle.Contains(boneRenderer.gameObject))
                    {
                        continue;
                    }
                }

                if (boneRenderer.drawBones)
                {
                    var size           = boneRenderer.boneSize * 0.025f;
                    var shape          = boneRenderer.boneShape;
                    var color          = boneRenderer.boneColor;
                    var nubColor       = new Color(color.r, color.g, color.b, color.a);
                    var selectionColor = Color.white;

                    for (var j = 0; j < boneRenderer.bones.Length; j++)
                    {
                        var bone = boneRenderer.bones[j];
                        if (bone.first == null || bone.second == null)
                        {
                            continue;
                        }

                        DoBoneRender(bone.first, bone.second, shape, color, size);
                    }

                    for (var k = 0; k < boneRenderer.tips.Length; k++)
                    {
                        var tip = boneRenderer.tips[k];
                        if (tip == null)
                        {
                            continue;
                        }

                        DoBoneRender(tip, null, shape, color, size);
                    }
                }

                if (boneRenderer.drawTripods)
                {
                    var size = boneRenderer.tripodSize * 0.025f;
                    for (var j = 0; j < boneRenderer.transforms.Length; j++)
                    {
                        var tripodSize = 1f;
                        var transform  = boneRenderer.transforms[j];
                        if (transform == null)
                        {
                            continue;
                        }

                        var position = transform.position;
                        var xAxis    = position + transform.rotation * Vector3.right * size * tripodSize;
                        var yAxis    = position + transform.rotation * Vector3.up * size * tripodSize;
                        var zAxis    = position + transform.rotation * Vector3.forward * size * tripodSize;

                        Handles.color = Color.red;
                        Handles.DrawLine(position, xAxis);
                        Handles.color = Color.green;
                        Handles.DrawLine(position, yAxis);
                        Handles.color = Color.blue;
                        Handles.DrawLine(position, zAxis);
                    }
                }
            }

            pyramidMeshRenderer.Render();
            boxMeshRenderer.Render();

            Gizmos.color = gizmoColor;
        }
예제 #9
0
        /// <summary>
        /// Returns the environment this GameObject exists in.
        /// </summary>
        public static GameObjectEnvironments GetGameObjectEnvironment(this GameObject gameObject)
        {
            //based on https://github.com/Unity-Technologies/PrefabAPIExamples/blob/master/Assets/Scripts/GameObjectTypeLogging.cs
            //most comments also from there

            GameObjectEnvironments environment;

#if UNITY_EDITOR
            //check if game object exists on disk
            if (EditorUtility.IsPersistent(gameObject))
            {
                if (!PrefabUtility.IsPartOfPrefabAsset(gameObject))
                {
                    //The GameObject is a temporary object created during import.
                    //OnValidate() is called two times with a temporary object during import:
                    //	First time is when saving cloned objects to .prefab file.
                    //	Second event is when reading .prefab file objects during import
                    environment = GameObjectEnvironments.PrefabImport;
                }
                else
                {
                    //GameObject is part of an imported Prefab Asset (from the Library folder)
                    environment = GameObjectEnvironments.PrefabAsset;
                }
            }

            else
            {
                //If the GameObject is not persistent let's determine which stage we are in first because getting Prefab info depends on it
                StageHandle mainStage    = StageUtility.GetMainStageHandle();
                StageHandle currentStage = StageUtility.GetStageHandle(gameObject);

                if (currentStage == mainStage)
                {
                    //viewing scenes in the main stage (aka -not- editing in prefab mode)
                    if (PrefabUtility.IsPartOfPrefabInstance(gameObject))
                    {
                        //GameObject is part of a Prefab Instance in the MainStage
                        environment = GameObjectEnvironments.PrefabInstance;
                    }
                    else
                    {
                        //GameObject is a plain GameObject in the MainStage
                        environment = GameObjectEnvironments.Scene;
                    }
                }

                else
                {
                    //editing a prefab in prefab mode
                    PrefabStage prefabStage = PrefabStageUtility.GetPrefabStage(gameObject);

                    if (prefabStage != null)
                    {
                        if (PrefabUtility.IsPartOfPrefabInstance(gameObject))
                        {
                            //GameObject is in a PrefabStage and is nested.
                            environment = GameObjectEnvironments.NestedPrefabStage;
                        }
                        else
                        {
                            //GameObject is in a PrefabStage.
                            environment = GameObjectEnvironments.PrefabStage;
                        }
                    }

                    else if (EditorSceneManager.IsPreviewSceneObject(gameObject))
                    {
                        //GameObject is not in the MainStage, nor in a PrefabStage.
                        //But it is in a PreviewScene so could be used for Preview rendering or other utilities.
                        environment = GameObjectEnvironments.PreviewScene;
                    }

                    else
                    {
                        //Unknown GameObject Info
                        environment = GameObjectEnvironments.Unknown;
                    }
                }
            }
#else
            //Can't do any of the above checks outside of the editor
            environment = GameObjectEnvironments.Unknown;
#endif

            return(environment);
        }
예제 #10
0
 public override void Init()
 {
     base.Init();
     mStageHandle = new StageHandle();
     mStageHandle.Init();
 }
예제 #11
0
    private static bool BelongsToCurrentStage(this GameObject go, PrefabStage prefabStage, StageHandle stageHandleMain)
    {
        var  stageHandleFromObject = StageUtility.GetStageHandle(go);
        bool result = prefabStage != null ? (stageHandleFromObject == prefabStage.stageHandle) : (stageHandleFromObject == stageHandleMain);

        return(result);
    }