static string DumpCheckDeterministicBehaviorFromLazyGetExpression(bool linkOnlySubSlot, bool linkToDirection, int[] invalidation) { var vec3 = ScriptableObject.CreateInstance <VFXInlineOperator>(); var direction = ScriptableObject.CreateInstance <VFXInlineOperator>(); vec3.SetSettingValue("m_Type", (SerializableType)typeof(Vector3)); direction.SetSettingValue("m_Type", (SerializableType)typeof(DirectionType)); if (linkToDirection) { if (linkOnlySubSlot) { vec3.outputSlots[0][1].Link(direction.inputSlots[0][0][1]); } else { vec3.outputSlots[0].Link(direction.inputSlots[0]); } } else { if (linkOnlySubSlot) { direction.outputSlots[0][0][1].Link(vec3.inputSlots[0][1]); } direction.outputSlots[0].Link(vec3.inputSlots[0]); } Action <int> Invalidate = delegate(int i) { switch (i) { case 0: direction.outputSlots[0].GetExpression(); break; case 1: direction.inputSlots[0].GetExpression(); break; case 2: vec3.inputSlots[0].GetExpression(); break; case 3: vec3.outputSlots[0].GetExpression(); break; default: break; } }; foreach (var i in invalidation) { Invalidate(i); } var allParentExpr = new List <VFXExpression>(); if (linkToDirection) { CollectExpression(direction.outputSlots[0].GetExpression(), allParentExpr); } else { CollectExpression(vec3.outputSlots[0].GetExpression(), allParentExpr); } string dump = allParentExpr.Select(o => o.GetType().Name).Aggregate((a, b) => a + ", " + b); vec3.outputSlots[0].UnlinkAll(); ScriptableObject.DestroyImmediate(vec3); ScriptableObject.DestroyImmediate(direction); return(dump); }
public static void Remove <P, C>(P parent, C toRemove, List <C> children) where P : ScriptableObject where C : ScriptableObject { children.Remove(toRemove); ScriptableObject.DestroyImmediate(toRemove, true); }
public static void Remove <P, V, K>(P parent, V newObject, K key, Dictionary <K, V> children) where P : ScriptableObject where V : ScriptableObject { children.Remove(key); ScriptableObject.DestroyImmediate(newObject, true); }
public static void CloseWindow() { windowInstance.Close(); ScriptableObject.DestroyImmediate(windowInstance); }
public override void Draw(UndoParentNode currOwner, bool style = true) { m_currOwner = currOwner; if (m_reordableList == null) { m_reordableList = new ReorderableList(m_additionalDirectives, typeof(AdditionalDirectiveContainer), true, false, false, false) { headerHeight = 0, footerHeight = 0, showDefaultBackground = false, drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (m_additionalDirectives[index] != null) { float labelWidthStyleAdjust = 0; if (style) { rect.xMin -= 10; labelWidthStyleAdjust = 15; } else { rect.xMin -= 1; } float popUpWidth = style ? 75 : 60f; float widthAdjust = m_additionalDirectives[index].LineType == AdditionalLineType.Include ? -14 : 0; Rect popupPos = new Rect(rect.x, rect.y, popUpWidth, EditorGUIUtility.singleLineHeight); Rect GUIDTogglePos = m_additionalDirectives[index].LineType == AdditionalLineType.Include ? new Rect(rect.x + rect.width - 3 * Constants.PlusMinusButtonLayoutWidth, rect.y, Constants.PlusMinusButtonLayoutWidth, Constants.PlusMinusButtonLayoutWidth) : new Rect(); Rect buttonPlusPos = new Rect(rect.x + rect.width - 2 * Constants.PlusMinusButtonLayoutWidth, rect.y - 2, Constants.PlusMinusButtonLayoutWidth, Constants.PlusMinusButtonLayoutWidth); Rect buttonMinusPos = new Rect(rect.x + rect.width - Constants.PlusMinusButtonLayoutWidth, rect.y - 2, Constants.PlusMinusButtonLayoutWidth, Constants.PlusMinusButtonLayoutWidth); float labelWidthBuffer = EditorGUIUtility.labelWidth; Rect labelPos = new Rect(rect.x + popupPos.width - labelWidthStyleAdjust, rect.y, labelWidthStyleAdjust + rect.width - popupPos.width - buttonPlusPos.width - buttonMinusPos.width + widthAdjust, EditorGUIUtility.singleLineHeight); m_additionalDirectives[index].LineType = (AdditionalLineType)m_currOwner.EditorGUIEnumPopup(popupPos, m_additionalDirectives[index].LineType); if (m_additionalDirectives[index].LineType == AdditionalLineType.Include) { if (m_additionalDirectives[index].GUIDToggle) { //if( m_additionalDirectives[ index ].LibObject == null && !string.IsNullOrEmpty( m_additionalDirectives[ index ].GUIDValue ) ) //{ // m_additionalDirectives[ index ].LibObject = AssetDatabase.LoadAssetAtPath<TextAsset>( AssetDatabase.GUIDToAssetPath( m_additionalDirectives[ index ].GUIDValue ) ); //} EditorGUI.BeginChangeCheck(); TextAsset obj = m_currOwner.EditorGUIObjectField(labelPos, m_additionalDirectives[index].LibObject, typeof(TextAsset), false) as TextAsset; if (EditorGUI.EndChangeCheck()) { string pathName = AssetDatabase.GetAssetPath(obj); string extension = Path.GetExtension(pathName); extension = extension.ToLower(); if (extension.Equals(".cginc") || extension.Equals(".hlsl")) { m_additionalDirectives[index].LibObject = obj; m_additionalDirectives[index].GUIDValue = AssetDatabase.AssetPathToGUID(pathName); } } } else { m_additionalDirectives[index].LineValue = m_currOwner.EditorGUITextField(labelPos, string.Empty, m_additionalDirectives[index].LineValue); } if (GUI.Button(GUIDTogglePos, m_additionalDirectives[index].GUIDToggle ? UIUtils.FloatIntIconOFF : UIUtils.FloatIntIconON, UIUtils.FloatIntPickerONOFF)) { m_additionalDirectives[index].GUIDToggle = !m_additionalDirectives[index].GUIDToggle; } } else { m_additionalDirectives[index].LineValue = m_currOwner.EditorGUITextField(labelPos, string.Empty, m_additionalDirectives[index].LineValue); } if (GUI.Button(buttonPlusPos, string.Empty, UIUtils.PlusStyle)) { m_actionType = ReordableAction.Add; m_actionIndex = index; } if (GUI.Button(buttonMinusPos, string.Empty, UIUtils.MinusStyle)) { m_actionType = ReordableAction.Remove; m_actionIndex = index; } } } }; } if (m_actionType != ReordableAction.None) { switch (m_actionType) { case ReordableAction.Add: AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>(); newItem.hideFlags = HideFlags.HideAndDontSave; m_additionalDirectives.Insert(m_actionIndex + 1, newItem); break; case ReordableAction.Remove: AdditionalDirectiveContainer itemToDelete = m_additionalDirectives[m_actionIndex]; m_additionalDirectives.RemoveAt(m_actionIndex); ScriptableObject.DestroyImmediate(itemToDelete); break; } m_isDirty = true; m_actionType = ReordableAction.None; EditorGUI.FocusTextInControl(null); } bool foldoutValue = currOwner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDirectives; if (style) { NodeUtils.DrawPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons); } else { NodeUtils.DrawNestedPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons); } currOwner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDirectives = foldoutValue; }
private void DrawActions(SerializedProperty property) { for (int i = 0; i < list.arraySize; i++) { SerializedProperty listEntry = list.GetArrayElementAtIndex(i); BuildAction buildAction = listEntry.objectReferenceValue as BuildAction; if (buildAction == null) { list.DeleteArrayElementAtIndex(i); --i; continue; } SerializedObject serializedBuildAction = new SerializedObject(buildAction); EditorGUILayout.BeginHorizontal(); bool show = listEntry.isExpanded; buildAction.actionEnabled = EditorGUILayout.Toggle(buildAction.actionEnabled, GUILayout.Width(15)); EditorGUI.BeginDisabledGroup(!buildAction.actionEnabled); UnityBuildGUIUtility.DropdownHeader(buildAction.actionName, ref show, false, GUILayout.ExpandWidth(true)); EditorGUI.EndDisabledGroup(); listEntry.isExpanded = show; EditorGUI.BeginDisabledGroup(i == 0); if (GUILayout.Button("↑↑", UnityBuildGUIUtility.helpButtonStyle)) { list.MoveArrayElement(i, 0); } if (GUILayout.Button("↑", UnityBuildGUIUtility.helpButtonStyle)) { list.MoveArrayElement(i, i - 1); } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(i == list.arraySize - 1); if (GUILayout.Button("↓", UnityBuildGUIUtility.helpButtonStyle)) { list.MoveArrayElement(i, i + 1); } EditorGUI.EndDisabledGroup(); if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle)) { BuildAction[] buildActions; buildActions = FindActionsByProperty(property); // Destroy underlying object. ScriptableObject.DestroyImmediate(buildActions[i], true); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance)); // Remove object reference from list. // TODO: Why do I need to call this twice? First call nulls reference, second one then deletes null entry. list.DeleteArrayElementAtIndex(i); list.DeleteArrayElementAtIndex(i); show = false; } EditorGUILayout.EndHorizontal(); if (show && buildAction.actionEnabled) { EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle); buildAction.Draw(serializedBuildAction); EditorGUILayout.EndVertical(); } } }
public void BuildFromKeyframes(List <JSplineKeyframe> keyframes) { bool keyframeDifference = SplineSolver == null; if (SplineSolver != null) { keyframeDifference = keyframes.Count() != Nodes.Count(); if (SplineType != SplineSolver.SplineType()) { keyframeDifference = true; } } if (keyframeDifference) { if (SplineSolver != null) { ScriptableObject.DestroyImmediate(SplineSolver); } if (SplineType == JSplineType.Liner) { if (keyframes.Count >= 2) { SplineSolver = ScriptableObject.CreateInstance <JLinearSplineSolver>(); } else { throw new SystemException("Need At Least 2 Points"); } } else if (SplineType == JSplineType.Hermite) { if (keyframes.Count >= 2) { SplineSolver = ScriptableObject.CreateInstance <JHermiteSplineSolver>(); } else { throw new SystemException("Need At Least 2 Points"); } } else if (SplineType == JSplineType.Bezier) { if (keyframes.Count >= 2) { SplineSolver = ScriptableObject.CreateInstance <JNTimesBezierSplineSolver>(); } else { throw new SystemException("Need At Least 2 Points"); } } else if (SplineType == JSplineType.CatmullRom) { if (keyframes.Count >= 4) { SplineSolver = ScriptableObject.CreateInstance <JCatmullRomSplineSolver>(); } else { throw new SystemException("Need At Least 4 Points"); } } else if (SplineType == JSplineType.CubicSpline) { if (keyframes.Count >= 2) { SplineSolver = ScriptableObject.CreateInstance <JNaturalCubicSplineSolver>(); } else { throw new SystemException("Need At Least 2 Points"); } } } if (SplineSolver != null) { SplineSolver.Nodes = keyframes; SplineSolver.closedCurve = IsClosed; SplineSolver.Build(); } }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { var project = ScriptableObject.CreateInstance <ProjectSO>(); project.project = new ProjectDummy(); if (SessionStateContext <UnityUser, LinkPermission> .current != null) { using (var sessionRoomsSelector = UISelectorFactory.createSelector <ProjectRoom[]>(SessionStateContext <UnityUser, LinkPermission> .current, nameof(ISessionStateDataProvider <UnityUser, LinkPermission> .rooms))) { var realProject = property.serializedObject.targetObject as UIStateManager; if (realProject && label.text.Equals("Active Project")) { try { UnityProject unityProject = realProject.projectSettingStateData.activeProject; project.project.Name = unityProject.Name; project.project.ProjectId = unityProject.ProjectId; project.project.Host = unityProject.Host; m_valid = true; } catch (Exception) { m_valid = false; } } else { if (realProject && label.text.StartsWith("Element")) { try { var index = int.Parse(label.text.Split(' ')[1]); var projectRoom = (ProjectRoom)sessionRoomsSelector.GetValue()[index]; UnityProject unityProject = projectRoom.project; project.project.Name = unityProject.Name; project.project.ProjectId = unityProject.ProjectId; project.project.Host = unityProject.Host; m_valid = true; } catch (Exception) { m_valid = false; } } } } } SerializedObject serializedObject = new UnityEditor.SerializedObject(project); SerializedProperty serializedPropertyProject = serializedObject.FindProperty("project"); EditorGUI.BeginProperty(position, label, property); EditorGUI.LabelField(new Rect(position.x, position.y, position.width, 16), label); if (m_valid) { var nameRect = new Rect(position.x, position.y + 18, position.width, 16); var projecIdRect = new Rect(position.x, position.y + 36, position.width, 16); var hostRect = new Rect(position.x, position.y + 54, position.width, 16); EditorGUI.indentLevel++; EditorGUI.PropertyField(nameRect, serializedPropertyProject.FindPropertyRelative("Name")); EditorGUI.PropertyField(projecIdRect, serializedPropertyProject.FindPropertyRelative("ProjectId")); var hostProperty = serializedPropertyProject.FindPropertyRelative("Host"); if (hostProperty != null) { EditorGUI.PropertyField(hostRect, serializedPropertyProject.FindPropertyRelative("Host")); } EditorGUI.indentLevel--; } EditorGUI.EndProperty(); ScriptableObject.DestroyImmediate(project); }
public override void Draw(UndoParentNode owner, bool style = true) { if (m_reordableList == null) { m_reordableList = new ReorderableList(m_additionalDirectives, typeof(AdditionalDirectiveContainer), true, false, false, false) { headerHeight = 0, footerHeight = 0, showDefaultBackground = false, drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (m_additionalDirectives[index] != null) { if (style) { rect.x -= 10; } else { rect.x -= 1; } float popUpWidth = style ? 0.35f : 0.29f; Rect popupPos = new Rect(rect.x, rect.y + 2, popUpWidth * rect.width, rect.height); Rect labelPos = new Rect(rect.x + popupPos.width, rect.y, 0.59f * rect.width, rect.height); Rect buttonPlusPos = new Rect(labelPos.x + labelPos.width, rect.y, ShaderKeywordButtonLayoutWidth, rect.height); Rect buttonMinusPos = new Rect(buttonPlusPos.x + buttonPlusPos.width, rect.y, ShaderKeywordButtonLayoutWidth, rect.height); m_additionalDirectives[index].LineType = (AdditionalLineType)owner.EditorGUIEnumPopup(popupPos, m_additionalDirectives[index].LineType); m_additionalDirectives[index].LineValue = owner.EditorGUITextField(labelPos, string.Empty, m_additionalDirectives[index].LineValue); if (GUI.Button(buttonPlusPos, string.Empty, UIUtils.PlusStyle)) { m_actionType = ReordableAction.Add; m_actionIndex = index; } if (GUI.Button(buttonMinusPos, string.Empty, UIUtils.MinusStyle)) { m_actionType = ReordableAction.Remove; m_actionIndex = index; } } } }; } if (m_actionType != ReordableAction.None) { switch (m_actionType) { case ReordableAction.Add: AdditionalDirectiveContainer newItem = ScriptableObject.CreateInstance <AdditionalDirectiveContainer>(); newItem.hideFlags = HideFlags.HideAndDontSave; m_additionalDirectives.Insert(m_actionIndex, newItem); break; case ReordableAction.Remove: AdditionalDirectiveContainer itemToDelete = m_additionalDirectives[m_actionIndex]; m_additionalDirectives.RemoveAt(m_actionIndex); ScriptableObject.DestroyImmediate(itemToDelete); break; } m_isDirty = true; m_actionType = ReordableAction.None; EditorGUI.FocusTextInControl(null); } bool foldoutValue = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDirectives; if (style) { NodeUtils.DrawPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons); } else { NodeUtils.DrawNestedPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons); } owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedAdditionalDirectives = foldoutValue; }
public void setParameter(string param, object content) { param = param.ToLower(); if (content == null) { if (args.ContainsKey(param)) { args[param] = null; } else { args.Add(param, null); } } else { bool saved = false; if (args.ContainsKey(param)) { var pv = args[param]; if (pv is IsoUnityType) { var i = (pv as IsoUnityType); if (i.canHandle(content)) { i.Value = content; saved = true; } else { ScriptableObject.DestroyImmediate(i, true); } } } if (!saved) { object c = IsoUnityTypeFactory.Instance.getIsoUnityType(content); if (c == null) { c = content; } #if UNITY_EDITOR else if (Application.isEditor && !Application.isPlaying && (UnityEditor.AssetDatabase.IsMainAsset(this) || UnityEditor.AssetDatabase.IsSubAsset(this))) { (c as ScriptableObject).hideFlags = HideFlags.HideInHierarchy; UnityEditor.AssetDatabase.AddObjectToAsset(c as Object, this); } #endif if (args.ContainsKey(param)) { args[param] = (Object)c; } else { args.Add(param, (Object)c); } } } this.keys = new List <string> (args.Keys); this.values = new List <Object> (args.Values); }
public void Draw(UndoParentNode owner, bool style = true) { if (m_owner == null) { m_owner = owner; } if (m_reordableList == null) { m_reordableList = new ReorderableList(m_items, typeof(UsePassItem), true, false, false, false) { headerHeight = 0, footerHeight = 0, showDefaultBackground = false, drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (m_items[index] != null) { float labelWidthMultiplier; float popUpWidth; float shaderSelectorMultiplier; float buttonPlusPosMultiplier; if (style) { rect.x -= 10; labelWidthMultiplier = 0.9f; popUpWidth = 0.31f; shaderSelectorMultiplier = 1.01f; buttonPlusPosMultiplier = 0.78f; } else { rect.x -= 1; labelWidthMultiplier = 1.01f; popUpWidth = 0.25f; shaderSelectorMultiplier = 1.0f; buttonPlusPosMultiplier = 0.55f; } Rect popupPos = new Rect(rect.x, rect.y + 2, popUpWidth * rect.width, rect.height); Rect labelPos = new Rect(rect.x + popupPos.width * labelWidthMultiplier, rect.y, 0.59f * rect.width, rect.height); Rect shaderSelectorPos = new Rect(labelPos.x + labelPos.width * shaderSelectorMultiplier, rect.y, 15, rect.height); Rect buttonPlusPos = new Rect(shaderSelectorPos.x + shaderSelectorPos.width * buttonPlusPosMultiplier, rect.y, ShaderKeywordButtonLayoutWidth, rect.height); Rect buttonMinusPos = new Rect(buttonPlusPos.x + buttonPlusPos.width, rect.y, ShaderKeywordButtonLayoutWidth, rect.height); EditorGUI.BeginChangeCheck(); m_items[index].Location = (UsePassLocation)owner.EditorGUIEnumPopup(popupPos, m_items[index].Location); if (EditorGUI.EndChangeCheck() && m_items[index].Location == UsePassLocation.Below && m_owner != null && m_owner.ContainerGraph.CurrentCanvasMode == NodeAvailability.TemplateShader) { m_items[index].Location = UsePassLocation.Above; UIUtils.ShowMessage("Below option still not available on templates"); } m_items[index].Value = owner.EditorGUITextField(labelPos, string.Empty, m_items[index].Value); if (GUI.Button(shaderSelectorPos, string.Empty, UIUtils.InspectorPopdropdownFallback)) { EditorGUI.FocusTextInControl(null); GUI.FocusControl(null); m_currentUsePassIdx = index; DisplayShaderContext(owner, GUILayoutUtility.GetRect(GUIContent.none, EditorStyles.popup)); } if (GUI.Button(buttonPlusPos, string.Empty, UIUtils.PlusStyle)) { m_actionType = ReordableAction.Add; m_actionIndex = index; } if (GUI.Button(buttonMinusPos, string.Empty, UIUtils.MinusStyle)) { m_actionType = ReordableAction.Remove; m_actionIndex = index; } } } }; } if (m_actionType != ReordableAction.None) { switch (m_actionType) { case ReordableAction.Add: UsePassItem newItem = ScriptableObject.CreateInstance <UsePassItem>(); newItem.hideFlags = HideFlags.HideAndDontSave; m_items.Insert(m_actionIndex + 1, newItem); break; case ReordableAction.Remove: UsePassItem itemToDelete = m_items[m_actionIndex]; m_items.RemoveAt(m_actionIndex); ScriptableObject.DestroyImmediate(itemToDelete); break; } m_isDirty = true; m_actionType = ReordableAction.None; EditorGUI.FocusTextInControl(null); } bool foldoutValue = owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedUsePass; if (style) { NodeUtils.DrawPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons); } else { NodeUtils.DrawNestedPropertyGroup(ref foldoutValue, m_moduleName, DrawReordableList, DrawButtons); } owner.ContainerGraph.ParentWindow.InnerWindowVariables.ExpandedUsePass = foldoutValue; }
void OnDestroy() { ScriptableObject.DestroyImmediate(this.ForkGroup, Application.isEditor && !Application.isPlaying); }
/// <summary> /// Destroy an event object and remove it from the array of events /// </summary> /// <param name="eventToDelete"></param> public void DeleteEvent(AudioEvent eventToDelete) { eventToDelete.DeleteNodes(); this.audioEvents.Remove(eventToDelete); ScriptableObject.DestroyImmediate(eventToDelete, true); }
/// <summary> /// Destroy an AudioParameter and remove it from the array of parameters /// </summary> /// <param name="parameterToDelete">The AudioParameter you wish to delete</param> public void DeleteParameter(AudioParameter parameterToDelete) { this.parameters.Remove(parameterToDelete); ScriptableObject.DestroyImmediate(parameterToDelete, true); }
public override void DrawGUI() { EventFilter returnedFilter; Expanded = TriggerGUILayout.DrawCustomFilterInspectorBar(Expanded, Filter, out returnedFilter); if (!returnedFilter) { foreach (Variable var in _outputVariables.Values) { ScriptableObject.DestroyImmediate(var); } Delete(); return; } Filter = returnedFilter; if (Expanded) { EditorGUILayout.BeginHorizontal(GUILayout.ExpandWidth(true)); GUILayout.Space(25); EditorGUILayout.BeginVertical(); GUILayout.BeginVertical(GUI.skin.box); TriggerAttribute triggerAttribute = TriggerGUILayout.GetTriggerAttribute(Filter.GetType()); if (triggerAttribute != null) { GUILayout.Label(triggerAttribute.Description, EditorStyles.wordWrappedLabel, GUILayout.ExpandWidth(false)); } EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null); GUILayout.Label("Input Parameters"); EditorGUILayoutExt.EndLabelStyle(); TriggerGUILayout.DrawSerializedObject(_serializedFilter, Filter.GetType(), Parent.GetScopeVariables()); EditorGUILayout.Separator(); EditorGUILayoutExt.BeginLabelStyle(11, FontStyle.Bold, null, null); GUILayout.Label("Output Parameters"); EditorGUILayoutExt.EndLabelStyle(); foreach (var v in Filter.GetOutputParameterDeclarations()) { GUILayout.Label(v.Name, GUILayout.ExpandWidth(false)); } EditorGUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Box("", GUILayout.Width(300), GUILayout.Height(1)); EditorGUILayout.EndHorizontal(); TriggerGUILayout.DrawAddFilterSelector(Filter.gameObject, Context.Refresh); TriggerGUILayout.DrawAddActionSelector(Filter.gameObject, Context.Refresh); EditorGUILayout.Separator(); GUILayout.EndVertical(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } }
public void ExportingNullMeshTest() { var validator = ScriptableObject.CreateInstance <MeshExportValidator>(); var root = new GameObject("root"); try { { var child = GameObject.CreatePrimitive(PrimitiveType.Cube); child.transform.SetParent(root.transform); // remove MeshFilter Component.DestroyImmediate(child.GetComponent <MeshFilter>()); } { var child = GameObject.CreatePrimitive(PrimitiveType.Cube); child.transform.SetParent(root.transform); // set null child.GetComponent <MeshFilter>().sharedMesh = null; } // validate validator.SetRoot(root, new GltfExportSettings(), new DefualtBlendShapeExportFilter()); var vs = validator.Validate(root); Assert.True(vs.All(x => x.CanExport)); // export var gltf = new glTF(); string json; using (var exporter = new gltfExporter(gltf, new GltfExportSettings())) { exporter.Prepare(root); exporter.Export(new UniGLTF.GltfExportSettings(), new EditorTextureSerializer()); json = gltf.ToJson(); } Assert.AreEqual(0, gltf.meshes.Count); Assert.AreEqual(2, gltf.nodes.Count); Assert.AreEqual(-1, gltf.nodes[0].mesh); Assert.AreEqual(-1, gltf.nodes[1].mesh); // import { var storage = new SimpleStorage(new ArraySegment <byte>(new byte[1024 * 1024])); var data = new JsonWithStorageParser(json, storage).Parse(); using (var context = new ImporterContext(data)) using (var loaded = context.Load()) { Assert.AreEqual(2, loaded.transform.GetChildren().Count()); { var child = loaded.transform.GetChild(0); Assert.IsNull(child.GetSharedMesh()); } { var child = loaded.transform.GetChild(1); Assert.IsNull(child.GetSharedMesh()); } } } } finally { GameObject.DestroyImmediate(root); ScriptableObject.DestroyImmediate(validator); } }
public void RecreateCopy() { if (m_SubChildren != null) { foreach (var child in m_SubChildren) { if (child != null) { child.onInvalidateDelegate -= SubChildrenOnInvalidate; ScriptableObject.DestroyImmediate(child, true); } } } if (subgraph == null) { m_SubChildren = null; m_SubBlocks = null; m_UsedSubgraph = null; return; } var graph = m_Subgraph.GetResource().GetOrCreateGraph(); HashSet <ScriptableObject> dependencies = new HashSet <ScriptableObject>(); var context = graph.children.OfType <VFXBlockSubgraphContext>().FirstOrDefault(); if (context == null) { m_SubChildren = null; m_SubBlocks = null; m_UsedSubgraph = null; return; } foreach (var child in graph.children.Where(t => t is VFXOperator || t is VFXParameter)) { dependencies.Add(child); child.CollectDependencies(dependencies); } foreach (var block in context.children) { dependencies.Add(block); block.CollectDependencies(dependencies); } var copy = VFXMemorySerializer.DuplicateObjects(dependencies.ToArray()); m_UsedSubgraph = graph; m_SubChildren = copy.OfType <VFXModel>().Where(t => t is VFXBlock || t is VFXOperator || t is VFXParameter).ToArray(); m_SubBlocks = m_SubChildren.OfType <VFXBlock>().ToArray(); foreach (var child in m_SubChildren) { child.onInvalidateDelegate += SubChildrenOnInvalidate; } foreach (var child in copy) { child.hideFlags = HideFlags.HideAndDontSave; } foreach (var subgraphBlocks in m_SubBlocks.OfType <VFXSubgraphBlock>()) { subgraphBlocks.RecreateCopy(); } SyncSlots(VFXSlot.Direction.kInput, true); }
public void DeleteScriptableObject(ScriptableObject o) { AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(o)); ScriptableObject.DestroyImmediate(o); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { EditorGUI.BeginProperty(position, label, property); EditorGUILayout.BeginHorizontal(); bool show = property.isExpanded; UnityBuildGUIUtility.DropdownHeader(label.text, ref show, false, GUILayout.ExpandWidth(true)); property.isExpanded = show; UnityBuildGUIUtility.HelpButton("Parameter-Details#build-actions"); EditorGUILayout.EndHorizontal(); list = property.FindPropertyRelative("buildActions"); List <Type> actionTypes; if (property.name.ToUpper().Contains("PRE")) { actionTypes = BuildActionListUtility.preBuildActions; } else { actionTypes = BuildActionListUtility.postBuildActions; } if (show) { EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle); for (int i = 0; i < list.arraySize; i++) { SerializedProperty listEntry = list.GetArrayElementAtIndex(i); BuildAction buildAction = listEntry.objectReferenceValue as BuildAction; SerializedObject serializedBuildAction = new SerializedObject(buildAction); EditorGUILayout.BeginHorizontal(); show = listEntry.isExpanded; buildAction.actionEnabled = EditorGUILayout.Toggle(buildAction.actionEnabled, GUILayout.Width(15)); EditorGUI.BeginDisabledGroup(!buildAction.actionEnabled); UnityBuildGUIUtility.DropdownHeader(buildAction.actionName, ref show, false, GUILayout.ExpandWidth(true)); EditorGUI.EndDisabledGroup(); listEntry.isExpanded = show; EditorGUI.BeginDisabledGroup(i == 0); if (GUILayout.Button("↑↑", UnityBuildGUIUtility.helpButtonStyle)) { list.MoveArrayElement(i, 0); } if (GUILayout.Button("↑", UnityBuildGUIUtility.helpButtonStyle)) { list.MoveArrayElement(i, i - 1); } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(i == list.arraySize - 1); if (GUILayout.Button("↓", UnityBuildGUIUtility.helpButtonStyle)) { list.MoveArrayElement(i, i + 1); } EditorGUI.EndDisabledGroup(); if (GUILayout.Button("X", UnityBuildGUIUtility.helpButtonStyle)) { BuildAction[] buildActions; if (property.name.ToUpper().Contains("PRE")) { buildActions = BuildSettings.preBuildActions.buildActions; } else { buildActions = BuildSettings.postBuildActions.buildActions; } // Destroy underlying object. ScriptableObject.DestroyImmediate(buildActions[i], true); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance)); // Remove object reference from list. // TODO: Why do I need to call this twice? First call nulls reference, second one then deletes null entry. list.DeleteArrayElementAtIndex(i); list.DeleteArrayElementAtIndex(i); show = false; } EditorGUILayout.EndHorizontal(); if (show && buildAction.actionEnabled) { EditorGUILayout.BeginVertical(UnityBuildGUIUtility.dropdownContentStyle); buildAction.Draw(serializedBuildAction); EditorGUILayout.EndVertical(); } } if (list.arraySize > 0) { GUILayout.Space(20); } if (actionTypes.Count > 0) { GUILayout.BeginHorizontal(); string[] buildActionNameList = new string[actionTypes.Count]; for (int i = 0; i < buildActionNameList.Length; i++) { buildActionNameList[i] = actionTypes[i].Name; } index = EditorGUILayout.Popup(index, buildActionNameList, UnityBuildGUIUtility.popupStyle, GUILayout.ExpandWidth(true)); if (GUILayout.Button("Add Build Action", GUILayout.ExpandWidth(false), GUILayout.MaxWidth(150)) && index < actionTypes.Count) { Type addedType = actionTypes[index]; int addedIndex = list.arraySize; list.InsertArrayElementAtIndex(addedIndex); list.serializedObject.ApplyModifiedProperties(); BuildAction[] buildActions; if (property.name.ToUpper().Contains("PRE")) { buildActions = BuildSettings.preBuildActions.buildActions; } else { buildActions = BuildSettings.postBuildActions.buildActions; } //buildActions[addedIndex] = Activator.CreateInstance(addedType) as BuildAction; buildActions[addedIndex] = ScriptableObject.CreateInstance(addedType) as BuildAction; buildActions[addedIndex].name = addedType.Name; buildActions[addedIndex].actionName = addedType.Name; buildActions[addedIndex].filter = new BuildFilter(); AssetDatabase.AddObjectToAsset(buildActions[addedIndex], BuildSettings.instance); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(BuildSettings.instance)); index = 0; } GUILayout.EndHorizontal(); } else { EditorGUILayout.HelpBox("No Build Actions found.", MessageType.Info); } EditorGUILayout.EndVertical(); } EditorGUI.EndProperty(); }
public override void Run() { var editorConnectionTestCollector = RemoteTestRunController.instance; editorConnectionTestCollector.hideFlags = HideFlags.HideAndDontSave; editorConnectionTestCollector.Init(m_TargetPlatform, m_HeartbeatTimeout); var remotePlayerLogController = RemotePlayerLogController.instance; remotePlayerLogController.hideFlags = HideFlags.HideAndDontSave; using (var settings = new PlayerLauncherContextSettings(m_OverloadTestRunSettings)) { m_SceneName = CreateSceneName(); var scene = PrepareScene(m_SceneName); string scenePath = scene.path; var filter = m_Settings.BuildNUnitFilter(); var runner = LoadTests(filter); var exceptionThrown = ExecutePreBuildSetupMethods(runner.LoadedTest, filter); if (exceptionThrown) { ReopenOriginalScene(m_Settings.originalScene); AssetDatabase.DeleteAsset(m_SceneName); CallbacksDelegator.instance.RunFailed("Run Failed: One or more errors in a prebuild setup. See the editor log for details."); return; } EditorSceneManager.MarkSceneDirty(scene); EditorSceneManager.SaveScene(scene); var playerBuildOptions = GetBuildOptions(scenePath); var success = BuildAndRunPlayer(playerBuildOptions); editorConnectionTestCollector.PostBuildAction(); ExecutePostBuildCleanupMethods(runner.LoadedTest, filter); ReopenOriginalScene(m_Settings.originalScene); AssetDatabase.DeleteAsset(m_SceneName); if (!success) { editorConnectionTestCollector.CleanUp(); ScriptableObject.DestroyImmediate(editorConnectionTestCollector); Debug.LogError("Player build failed"); throw new TestLaunchFailedException("Player build failed"); } if ((playerBuildOptions.BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0) { editorConnectionTestCollector.PostSuccessfulBuildAction(); editorConnectionTestCollector.PostSuccessfulLaunchAction(); } var runSettings = m_OverloadTestRunSettings as PlayerLauncherTestRunSettings; if (success && runSettings != null && runSettings.buildOnly) { EditorUtility.RevealInFinder(playerBuildOptions.BuildPlayerOptions.locationPathName); } } }