private void RenderCreatePrefabButton() { if (GUILayout.Button(GetContentForCreatePrefabButton(), GUILayout.Width(180.0f))) { PrefabFactory.CreateFromSelectedObjects(_settings.Pivot); } }
private static void ReadAllPrefabsInCategory(PrefabCategory prefabCategory, XmlNodeList prefabNodes) { if (prefabNodes.Count == 0) { return; } for (int prefabNodeIndex = 0; prefabNodeIndex < prefabNodes.Count; ++prefabNodeIndex) { XmlNode prefabNode = prefabNodes[prefabNodeIndex]; XmlNode prefabNameNode = prefabNode.SelectSingleNode(PrefabConfigXMLInfo.PrefabNameNode); XmlNode prefabPathNode = prefabNode.SelectSingleNode(PrefabConfigXMLInfo.PrefabPathNode); if (prefabPathNode == null) { continue; } XmlNode offsetFromGridNode = prefabNode.SelectSingleNode(PrefabConfigXMLInfo.PrefabOffsetFromGridSurfaceNode); XmlNode offsetFromObjectNode = prefabNode.SelectSingleNode(PrefabConfigXMLInfo.PrefabOffsetFromObjectSurfaceNode); GameObject unityPrefab = AssetDatabase.LoadAssetAtPath(prefabPathNode.InnerText, typeof(GameObject)) as GameObject; if (unityPrefab == null) { continue; } Prefab prefab = PrefabFactory.Create(unityPrefab); if (prefabNameNode != null && !string.IsNullOrEmpty(prefabNameNode.InnerText)) { prefab.Name = prefabNameNode.InnerText; } float offsetFromGrid = 0.0f; if (offsetFromGridNode != null) { try { offsetFromGrid = float.Parse(offsetFromGridNode.InnerText); } catch (Exception) { } } prefab.OffsetFromGridSurface = offsetFromGrid; float offsetFromObject = 0.0f; if (offsetFromObjectNode != null) { try { offsetFromObject = float.Parse(offsetFromObjectNode.InnerText); } catch (Exception) { } } prefab.OffsetFromObjectSurface = offsetFromObject; ReadPrefabTagAssociations(prefab, prefabNode.SelectNodes(PrefabConfigXMLInfo.PrefabAssociatedTagNode)); prefabCategory.AddPrefab(prefab); } }
private void PerformDropUsingFirstPrefabInValidUnityPrefabCollection(List <GameObject> validUnityPrefabs) { GameObject firstValidUnityPrefab = GetFirstUnityPrefabFromValidUnityPrefabsCollection(validUnityPrefabs); PrefabCategory categoryWhichContainsPrefab = PrefabCategoryDatabase.Get().GetPrefabCategoryWhichContainsPrefab(firstValidUnityPrefab); if (categoryWhichContainsPrefab != null) { AssignPrefabToDestinationTileConnection(categoryWhichContainsPrefab.GetPrefabByUnityPrefab(firstValidUnityPrefab)); } else { Prefab firstValidPrefab = GetFirstPrefabFromValidPrefabsCollection(PrefabFactory.Create(validUnityPrefabs)); CreatePrefabToCategoryAssociationAndAssignPrefabToDestinationTileConnection(firstValidPrefab); } }
protected override void PerformDrop() { if (_dropDestination == DropDestination.Element) { if (_destinationDecorPaintBrushElement == null) { return; } List <GameObject> validUnityPrefabsInvolvedInDropOperation = PrefabValidator.GetValidPrefabsFromEntityCollection(DragAndDrop.objectReferences, false); if (validUnityPrefabsInvolvedInDropOperation.Count != 0) { PerformDropUsingFirstPrefabInValidUnityPrefabCollection(validUnityPrefabsInvolvedInDropOperation); } } else { if (_destinationBrush == null) { return; } List <GameObject> validUnityPrefabs = PrefabValidator.GetValidPrefabsFromEntityCollection(DragAndDrop.objectReferences, false); if (validUnityPrefabs.Count != 0) { UndoEx.RecordForToolAction(_destinationBrush); foreach (GameObject unityPrefab in validUnityPrefabs) { DecorPaintObjectPlacementBrushElement newElement = _destinationBrush.CreateNewElement(); PrefabCategory categoryWhichContainsPrefab = PrefabCategoryDatabase.Get().GetPrefabCategoryWhichContainsPrefab(unityPrefab); if (categoryWhichContainsPrefab != null) { newElement.Prefab = categoryWhichContainsPrefab.GetPrefabByUnityPrefab(unityPrefab); } else { Prefab prefab = PrefabFactory.Create(unityPrefab); UndoEx.RecordForToolAction(_destinationBrush.DestinationCategoryForElementPrefabs); PrefabWithPrefabCategoryAssociationQueue.Instance.Enqueue(PrefabWithPrefabCategoryAssociationFactory.Create(prefab, _destinationBrush.DestinationCategoryForElementPrefabs)); newElement.Prefab = prefab; } } } } Octave3DWorldBuilder.ActiveInstance.RepaintAllEditorWindows(); }
public void AddPrefab(GameObject unityPrefab) { if (!ContainsPrefab(unityPrefab)) { if (!PrefabCategoryDatabase.Get().IsThereCategoryWhichContainsPrefab(unityPrefab)) { Prefab prefab = PrefabFactory.Create(unityPrefab); _prefabs.AddEntity(prefab); } else { PrefabCategory categoryWhichContainsPrefab = PrefabCategoryDatabase.Get().GetPrefabCategoryWhichContainsPrefab(unityPrefab); LogPrefabAlreadyExistsInCategoryMessage(categoryWhichContainsPrefab.Name); } } }
public static Prefab CreateFromSelectedObjects(Pivot prefabPivot) { // Ensure that all necessary data is in place ObjectSelectionPrefabCreationSettings prefabCreationSettings = ObjectSelectionPrefabCreationSettings.Get(); if (string.IsNullOrEmpty(prefabCreationSettings.PrefabName) || string.IsNullOrEmpty(prefabCreationSettings.DestinationFolder)) { return(null); } if (ObjectSelection.Get().NumberOfSelectedObjects == 0) { return(null); } List <GameObject> allSelectedObjects = ObjectSelection.Get().GetAllSelectedGameObjects(); if (allSelectedObjects.Count == 0) { return(null); } // Check if a prefab with the same name already exists bool shouldPrefabBeCreated = true; GameObject prefabWithSameName = ProjectAssetDatabase.LoadPrefabWithNameInFolder(prefabCreationSettings.PrefabName, prefabCreationSettings.DestinationFolder, false); if (prefabWithSameName != null) { if (EditorUtility.DisplayDialog("Are you sure?", "A prefab with the specified name already exists in the specified folder. Would you like to overwrite it?", "Yes", "No")) { // If the user chose 'Yes', we have to remove the existing prefab from its category PrefabCategory categoryWhichContainsSamePrefab = PrefabCategoryDatabase.Get().GetPrefabCategoryWhichContainsPrefab(prefabWithSameName); if (categoryWhichContainsSamePrefab != null) { categoryWhichContainsSamePrefab.RemoveAndDestroyPrefab(prefabWithSameName); } } else { shouldPrefabBeCreated = false; } } if (!shouldPrefabBeCreated) { return(null); } // Create all the objects which will reside in the prefab hierarchy GameObject prefabRoot = new GameObject(prefabCreationSettings.PrefabName); Box objectCollectionWorldBox = Box.GetInvalid(); var allObjectsInPrefabHierarchy = new List <GameObject>(); foreach (GameObject gameObject in allSelectedObjects) { Transform gameObjectTransform = gameObject.transform; GameObject gameObjectClone = Octave3DWorldBuilder.Instantiate(gameObject, gameObjectTransform.position, gameObjectTransform.rotation) as GameObject; allObjectsInPrefabHierarchy.Add(gameObjectClone); Transform cloneTransform = gameObjectClone.transform; gameObjectClone.name = gameObject.name; cloneTransform.localScale = gameObjectTransform.lossyScale; if (objectCollectionWorldBox.IsValid()) { objectCollectionWorldBox.Encapsulate(gameObjectClone.GetWorldBox()); } else { objectCollectionWorldBox = gameObjectClone.GetWorldBox(); } } // Now calculate the root object's position based on the specified pivot point Transform prefabRootTransform = prefabRoot.transform; if (prefabPivot == Pivot.Center) { prefabRootTransform.position = objectCollectionWorldBox.Center; } else if (prefabPivot == Pivot.BottomCenter) { prefabRootTransform.position = objectCollectionWorldBox.GetBoxFaceCenter(BoxFace.Bottom); } // Now that the root object's position is in place, attach all objects as children of the root foreach (GameObject gameObject in allObjectsInPrefabHierarchy) { gameObject.transform.parent = prefabRootTransform; } // Create the prefab and assign it to the chosen category GameObject createdUnityPrefab = ProjectAssetDatabase.CreatePrefab(prefabRoot, prefabCreationSettings.PrefabName, prefabCreationSettings.DestinationFolder); if (createdUnityPrefab == null) { return(null); } UndoEx.RecordForToolAction(prefabCreationSettings.DestinationCategory); Prefab createdPrefab = PrefabFactory.Create(createdUnityPrefab); prefabCreationSettings.DestinationCategory.AddPrefab(createdPrefab); Octave3DWorldBuilder.DestroyImmediate(prefabRoot); PrefabManagementWindow.Get().RepaintOctave3DWindow(); return(createdPrefab); }
private void ExtractAllValidPrefabsInDroppedFolder() { List <GameObject> validUnityPrefabs = ProjectAssetDatabase.LoadAllValidPrefabsInFolder(FolderPath, _extractPrefabsInSubfolders, true); _validPrefabs = PrefabFactory.Create(validUnityPrefabs); }
private void ExtractAllValidDroppedPrefabs() { List <GameObject> validUnityPrefabs = PrefabValidator.GetValidPrefabsFromEntityCollection(DragAndDrop.objectReferences, false); _validDroppedPrefabs = PrefabFactory.Create(validUnityPrefabs); }