private void AssignObject(Object newObject) { //It seems, at least in 2019.4 with IMGUI, that just rebinding the inspector is not enough; we need to recreate it. m_Inspector?.RemoveFromHierarchy(); m_Inspector = null; m_Header?.RemoveFromHierarchy(); m_Header = null; // TODO Display a missing script notice or something? if (!newObject) { return; } m_SerializedObject = new SerializedObject(newObject); m_Inspector = new InspectorElement(); m_Header = m_OwnerList.CreateHeader(m_Index, m_SerializedObject, m_Inspector); if (m_Header != null) { Add(m_Header); } Add(m_Inspector); this.Bind(m_SerializedObject); }
private VisualElement GetEditorSystemDataElement() { var foldout = new Foldout { text = "Editor systems", value = false, contentContainer = { style = { marginLeft = 5 } } }; if (GFEditorSystemUtility.GetSystemsData(target as Setup)) { LoadLocal(); } else { LoadBase(); } void LoadBase() { foldout.Clear(); foldout.Add(new Button(LoadLocal) { text = "Add local data" }); var local = GFEditorSystemUtility.GetSystemsData(target as Setup); if (local) { GFEditorSystemUtility.RemoveSystemsData(target as Setup); EditorFramework.IsNeedRefreshSystems = true; } } void LoadLocal() { foldout.Clear(); var local = GFEditorSystemUtility.GetSystemsData(target as Setup); if (!local) { local = GFEditorSystemUtility.AddSystemsData(target as Setup); EditorFramework.IsNeedRefreshSystems = true; } foldout.Add(new Button(LoadBase) { text = "Remove local data" }); var element = new InspectorElement(local); foldout.Add(element); } return(foldout); }
private VisualElement GetSceneObjetsOrderElement() { var foldout = new Foldout { text = "Scene objects order", value = false, contentContainer = { style = { marginLeft = 5 } } }; if (GFContextSystemUtility.GetSystemOrder(target as GFContext)) { LoadLocal(); } else { LoadBase(); } void LoadBase() { foldout.Clear(); foldout.Add(new Button(LoadLocal) { text = "Add local data" }); var local = GFContextSystemUtility.GetSystemOrder(target as GFContext); if (local) { GFContextSystemUtility.RemoveSystemOrder(target as GFContext); } } void LoadLocal() { foldout.Clear(); var local = GFContextSystemUtility.GetSystemOrder(target as GFContext); if (!local) { local = GFContextSystemUtility.AddSystemOrder(target as GFContext); } foldout.Add(new Button(LoadBase) { text = "Remove local data" }); var element = new InspectorElement(local); foldout.Add(element); } return(foldout); }
void OnListSelectChange(ListElement data) { mSelectNodel = data; //var hierarchyData = (HierarchyListWindow.HierarchyElementData) data.ElementData; mSelectElement = InspectorElement.GetInspectorElement(data); if (mSelectElement != null) { infoWindow.Refresh(mSelectElement); } }
public void OnEnable() { m_Tank = GameObject.FindObjectOfType <TankScript>(); if (m_Tank == null) { return; } var inspector = new InspectorElement(m_Tank); rootVisualElement.Add(inspector); }
public void OnEnable() { m_GM = GameObject.FindObjectOfType <GameManager>(); if (m_GM == null) { return; } var inspector = new InspectorElement(m_GM); rootVisualElement.Add(inspector); }
public void Refresh(InspectorElement element) { mSelectNodel = ((BundleListWindow)mOwnerWindow).SelectNodel; cacheBundleObject = element; scrollVector2 = Vector2.zero; cacheFolderObject = cacheBundleObject as InspectorElementFolder; cachePrefabObject = cacheBundleObject as InspectorElementPrefab; if (cachePrefabObject != null) { LoadAsset(cachePrefabObject.Depends); } }
public static void ApplyStrategyGroup(ListElement folder, int strategyIndex) { List <ListElement> child = new List <ListElement>(); GetCurrentChildElements(folder, ref child); for (int i = 0; i < child.Count; i++) { InspectorElement element = InspectorElement.GetInspectorElement(child[i]); if (element != null) { ApplyStrategyGroup((InspectorElementPrefab)element, strategyIndex); } } }
public bool OnAddNewElement(ListElement element) { InspectorElement newElement = InspectorElement.GetInspectorElement(element); if (ResourcElements.ContainsKey(element.InstanceID) == false) { ResourcElements.Add(element.InstanceID, newElement); return(true); } else if (ResourcElements[element.InstanceID] != newElement) { Debug.LogError(string.Format("hash conflict file [{0}] file [{1}] hash [{2}]", ResourcElements[element.InstanceID].AssetFilePath, element.Path, element.InstanceID)); } return(false); }
public void Initialize() { m_ContentRoot = new InspectorElement(); m_ContentRoot.OnChanged += (element, path) => { Provider.OnContentChanged(new ContentProvider.ChangeContext(element)); }; m_ContentRoot.AddContext(InspectionContext); if (InspectionContext.ApplyInspectorStyling) { m_ContentRoot.RegisterCallback <GeometryChangedEvent, VisualElement>((evt, element) => StylingUtility.AlignInspectorLabelWidth(element), m_ContentRoot); } m_ContentNotReadyRoot = new InspectorElement(); Root.contentContainer.Add(m_ContentRoot); Root.contentContainer.Add(m_ContentNotReadyRoot); m_ContentRoot.style.flexGrow = 1; }
public InspectorElement CreateInspectorElement(ref string assetFilePath, bool isFolder) { InspectorElement element = null; if (isFolder) { element = new InspectorElementFolder(assetFilePath); } else if (Path.GetExtension(assetFilePath) == ".prefab") { element = new InspectorElementPrefab(assetFilePath); } else { element = new InspectorElement(assetFilePath); } return(element); }
public override VisualElement Build() { var root = new VisualElement(); root.StretchToParentSize(); Resources.Templates.Explorer.PropertyBagExplorer.Clone(root); var pooled = ListPool <BindingContextElement> .Get(); try { root.Query <BindingContextElement>().ToList(pooled); foreach (var binding in pooled) { binding.AddContext(Target.InspectionContext); } } finally { ListPool <BindingContextElement> .Release(pooled); } var split = root.Q <TwoPaneSplitView>(className: k_Splitter); split.fixedPaneInitialDimension = Target.InspectionContext.SplitPosition; split.schedule.Execute(() => { if (null != split.fixedPane) { Target.InspectionContext.SplitPosition = split.fixedPane.resolvedStyle.width; } }).Every(0); Target.InspectionContext.OnPropertyBagSelected += detail => { m_CurrentPropertyBag.ClearTarget(); m_CurrentPropertyBag.SetTarget(detail); }; m_CurrentPropertyBag = root.Q <InspectorElement>(className: k_Detail); return(root); }
public static void GetSubFolderChildElements(ListElement parentElement, ref List <ListElement> result) { parentElement.TryUpdateFile(); // 子文件没有子节点 if (parentElement.ChildElements.Count == 0) { result.Add(parentElement); return; } for (int i = 0; i < parentElement.ChildElements.Count; i++) { if (parentElement.ChildElements[i].ChildElements.Count > 0) { GetAllChildElements(parentElement, ref result); } else { InspectorElement element = InspectorElement.GetInspectorElement(parentElement.ChildElements[i]); Debug.Log(string.Format("忽略文件 [{0}]!", element.AssetFilePath)); } } }
public static void BuildSingleByElementFolder(InspectorElementFolder folder, ListElement noder, bool immediatelyExecute = false) { //ClearBundleName(); if (!immediatelyExecute && folder.IsIgnoreAll) { Debug.Log(string.Format("忽略文件 [{0}]!", folder.AssetFilePath)); return; } // common List <AssetBundleBuild> allBundle = new List <AssetBundleBuild>(); allBundle.AddRange(GetCommonBuilds()); // all file List <ListElement> allElements = new List <ListElement>(); if (folder.isIgnore) { GetSubFolderChildElements(noder, ref allElements); } else { GetAllChildElements(noder, ref allElements); } if (allElements.Count == 0) { Debug.Log(string.Format("当前文件夹中 [{0}] 不包含任何文件!", folder.AssetFilePath)); return; } HashSet <string> filterStr = new HashSet <string>(); for (int i = 0; i < allElements.Count; i++) { // ReSharper disable once SuspiciousTypeConversion.Global var elementData = allElements[i].ElementData as HierarchyListWindow.HierarchyElementData; if (elementData != null && !elementData.IsFolder) { InspectorElement elementPrefab = elementData.ElementData as InspectorElementPrefab; if (elementPrefab != null) { if (elementPrefab.isIgnore == false) { var eledata = GetBundleBuildByElementPrefab((InspectorElementPrefab)elementPrefab); for (int j = 0; j < eledata.Count; j++) { if (filterStr.Contains(eledata[j].assetBundleName) == false) { filterStr.Add(eledata[j].assetBundleName); allBundle.Add(eledata[j]); } } } else { Debug.Log(string.Format("Ignore Asset File [{0}]!", elementPrefab.AssetFilePath)); } } //elementPrefab = ; //if (BundleDataManager.Instance.ResourcElements.TryGetValue(elementData.AssetFilePath, out elementPrefab)) //{ //} } } BuildAssetBundles(Application.dataPath + "/../../Resources/TestBuildNew", ref allBundle); //string outputFile = Application.dataPath + "/../../Resources/TestBuildNew"; //if (Directory.Exists(outputFile) == false) // Directory.CreateDirectory(outputFile); //BuildPipeline.BuildAssetBundles(outputFile, allBundle.ToArray(), BuildAssetBundleOptions.None, BundleSetting.UnityBuildTarget); //Debug.Log(outputFile); }
public void AddConditionPort(ActorStateNode retNode, ActorStateTransitionCondition transCond = null, ActorState destState = null, string overridenPortName = "") { var generatedPort = GeneratePort(retNode, Direction.Output); var outputPortCount = retNode.outputContainer.Query("connector").ToList().Count; var oldLabel = generatedPort.contentContainer.Q <Label>("type"); generatedPort.contentContainer.Remove(oldLabel); generatedPort.portName = (string.IsNullOrEmpty(overridenPortName) ? $"Condition {outputPortCount}" : overridenPortName); var condField = new ObjectField { objectType = typeof(ActorStateTransitionCondition), value = transCond }; if (transCond != null) { retNode.ports.Add(transCond, destState); } Label l = condField.Q <Label>(); l.text = transCond == null ? "None" : transCond.name; condField.RegisterValueChangedCallback(evt => { if (evt.previousValue != null && retNode.ports.ContainsKey(evt.previousValue as ActorStateTransitionCondition)) { retNode.ports.Remove(evt.previousValue as ActorStateTransitionCondition); } ActorStateTransitionCondition cond = (evt.newValue as ActorStateTransitionCondition); l.text = cond.name; if ((generatedPort.connections.Any(x => (x.input.node as ActorStateNode).GUID != retNode.GUID))) { destState = (generatedPort.connections.First(x => (x.input.node as ActorStateNode).GUID != retNode.GUID).input.node as ActorStateNode).relevantState; } retNode.ports.Add(cond, destState); }); //condField.label = generatedPort.portName; //condField.RegisterValueChangedCallback(evt => generatedPort.contentContainer.GetFirstOfType<ObjectField>().value = evt.newValue); var deleteButton = new Button(() => RemovePort(retNode, generatedPort)) { text = "X" }; generatedPort.contentContainer.Add(new Label(" ")); generatedPort.contentContainer.Add(new IntegerField { label = "Priority: " }); //generatedPort.contentContainer.Add(CreateEd) generatedPort.contentContainer.Add(condField); generatedPort.RegisterCallback <MouseUpEvent>(e => { if ((generatedPort.connections.Any(x => (x.input.node as ActorStateNode).GUID != retNode.GUID))) { destState = (generatedPort.connections.First(x => (x.input.node as ActorStateNode).GUID != retNode.GUID).input.node as ActorStateNode).relevantState; } ActorStateTransitionCondition a = (ActorStateTransitionCondition)generatedPort.Q <ObjectField>().value; if (a != null) { //Debug.Log("Adding key value pair " + a + ", " + destState); if (!retNode.ports.ContainsKey(a)) { retNode.ports.Add(a, destState); } else { retNode.ports[a] = destState; } } }); if (transCond != null) { var inspEl = new InspectorElement(transCond); inspEl.RegisterCallback <MouseUpEvent>(e => { retNode.RefreshExpandedState(); }); generatedPort.contentContainer.Add(inspEl); } generatedPort.contentContainer.Add(deleteButton); retNode.outputContainer.Add(generatedPort); retNode.RefreshPorts(); retNode.RefreshExpandedState(); }
private void SetItemExpanded(bool expanded, VisualElement header, Object target, InspectorElement inspector) { inspector.style.display = expanded ? DisplayStyle.Flex : DisplayStyle.None; header.EnableInClassList(itemHeaderCollapsedUssClassName, !expanded); InternalEditorUtility.SetIsInspectorExpanded(target, expanded); }
/// <summary> /// Override this method in a child class to customize inspector headers as a whole. /// </summary> /// <param name="itemIndex">The index in the list</param> /// <param name="serializedObject">The inspected object</param> /// <param name="inspector">The inspector element under the header.</param> /// <returns>The created header.</returns> protected virtual VisualElement CreateHeader(int itemIndex, SerializedObject serializedObject, InspectorElement inspector) { var target = serializedObject.targetObject; var header = new Disabler(() => !serializedObject.IsEditable()) { viewDataKey = $"Header{target.GetInstanceID()}" }; var headerContainer = header.contentContainer; headerContainer.AddToClassList(itemHeaderUssClassName); bool wasExpanded = InternalEditorUtility.GetIsInspectorExpanded(target); SetItemExpanded(wasExpanded, headerContainer, target, inspector); var foldout = AddHeaderFoldout(headerContainer, wasExpanded); foldout.RegisterValueChangedCallback(e => SetItemExpanded(e.newValue, headerContainer, target, inspector)); header.AddManipulator(new DragAndClickManipulator { onStartDragging = () => StartDraggingItem(itemIndex), onClick = () => foldout.value = !foldout.value }); header.RegisterCallback <MouseDownEvent>(e => { if (e.button == 1) { ShowInspectorContextMenu(new Rect(e.mousePosition, default), headerContainer, itemIndex, serializedObject); } }); AddPrelabelHeaderElements(headerContainer, itemIndex, serializedObject); AddHeaderLabel(headerContainer, itemIndex, serializedObject); AddPostlabelHeaderElements(headerContainer, itemIndex, serializedObject); return(header); }
void OnEnable() { var drawer = new InspectorElement(_bb); rootVisualElement.Add(drawer); }
public void OnEnable() { m_Tank = GameObject.FindObjectOfType <TankScript>(); if (m_Tank == null) { return; } var root = rootVisualElement; #region Inline C# // // // var inlineVE = new VisualElement() { style = { marginTop = 6, marginBottom = 6, flexDirection = FlexDirection.Row, backgroundColor = new Color(0.3f, 0.3f, 0.3f), } }; // Label inlineVE.Add(new Label() { text = "Inline C#", style = { fontSize = 20, unityFontStyleAndWeight = FontStyle.Bold, width = 140 } }); // TextField inlineVE.Add(new TextField() { value = m_Tank.tankName, style = { fontSize = 20, unityFontStyleAndWeight = FontStyle.Bold, flexGrow = 1 } }); // IntegerField inlineVE.Add(new IntegerField() { value = m_Tank.tankSize, style = { fontSize = 20, unityFontStyleAndWeight = FontStyle.Bold, width = 100, backgroundColor = Color.blue } }); root.Add(inlineVE); // // // #endregion Inline C# #region C# + USS // // // var ussVE = new VisualElement() { name = "row" }; ussVE.AddToClassList("container"); ussVE.styleSheets.Add(Resources.Load <StyleSheet>("Basics/basics_styles")); ussVE.Add(new Label() { text = "USS" }); ussVE.Add(new TextField() { value = m_Tank.tankName }); ussVE.Add(new IntegerField() { value = m_Tank.tankSize }); root.Add(ussVE); // // // #endregion C# + USS #region C# + USS + UXML // // // var visualTree = Resources.Load("Basics/basics_uxml") as VisualTreeAsset; var uxmlVE = visualTree.CloneTree(); uxmlVE.styleSheets.Add(Resources.Load <StyleSheet>("Basics/basics_styles")); root.Add(uxmlVE); // // // #endregion C# + USS + UXML #region UQuery // // // uxmlVE.Q <TextField>().value = m_Tank.tankName; uxmlVE.Q <IntegerField>().value = m_Tank.tankSize; var textFields = root.Query <TextField>(); var integerFields = root.Query <IntegerField>(); // // // #endregion UQuery #region Events // // // inlineVE.Q <TextField>().RegisterCallback <MouseEnterEvent>( e => (e.target as VisualElement) .style.backgroundColor = Color.yellow); inlineVE.Q <TextField>().RegisterCallback <MouseLeaveEvent>( e => (e.target as VisualElement) .style.backgroundColor = Color.clear); var textFieldList = textFields.ToList(); foreach (var field in textFieldList) { field.RegisterCallback <ChangeEvent <string> >( e => m_Tank.tankName = (e.target as TextField).value); } integerFields.ForEach(field => field.RegisterValueChangedCallback( e => m_Tank.tankSize = e.newValue)); // // // #endregion Events #region Scheduler // // // var scheduledAction = root.schedule.Execute(() => { textFields.ForEach(t => t.value = m_Tank.tankName); integerFields.ForEach(t => t.value = m_Tank.tankSize); }); scheduledAction.Every(100); // ms // // // #endregion Scheduler #region Bindings // // // var inspector = new InspectorElement(m_Tank); // TODO: Ignore this bit. It's to account for a bug. // Once fixed, this code will not be necessary anymore. inspector.RemoveFromClassList("unity-inspector"); inspector.Query <PropertyField>().ForEach((pf) => { pf.Q <Label>().RemoveFromHierarchy(); pf.Q(className: "unity-property-field__input").style.flexGrow = 1; }); root.Add(inspector); // // // #endregion Bindings #region IMGUI // // // var imguiContainer = new IMGUIContainer(() => { IMGUIDemoWindow.DemoOnGUI(m_Tank); }); root.Add(imguiContainer); // // // #endregion IMGUI #region Background Image root.style.overflow = Overflow.Hidden; var backgroundTexture = Resources.Load <Texture2D>("Basics/blue_tank"); var background = new VisualElement() { name = "background", style = { backgroundImage = backgroundTexture, position = Position.Absolute, bottom = 0, right = 0, width = 250, height = 250 } }; root.Insert(0, background); #endregion }