private static GameObject[] GetStateGameObjects(StageHandle stageHandle) { return(stageHandle.FindComponentsOfType <Transform>() .Select(x => x.gameObject) .Distinct() .ToArray()); }
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); }
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; } }
private static Canvas GetCanvas() { StageHandle handle = StageUtility.GetCurrentStageHandle(); if (!handle.FindComponentOfType <Canvas>()) { EditorApplication.ExecuteMenuItem("GameObject/UI/Canvas"); } Canvas c = handle.FindComponentOfType <Canvas>(); return(c); }
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); } }
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); } } } }
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; }
/// <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); }
public override void Init() { base.Init(); mStageHandle = new StageHandle(); mStageHandle.Init(); }
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); }