using UnityEditor using UnityEngine public class HolebusterProcessor M

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using UnityEditor;
using UnityEngine;
public class HolebusterProcessor : MonoBehaviour
{
[MenuItem("GameObject/Process level", false, 0)]
public static void CreateTextArea(MenuCommand menuCommand)
{
var rootObject = (GameObject) menuCommand.context;
string selectedPath = EditorUtility.OpenFolderPanel("Folder to export", "Assets", "");
if (selectedPath.IndexOf(Application.dataPath) != 0)
{
EditorUtility.DisplayDialog("Error", "Please select a folder inside project", "OK");
return;
}
// Здесь загружаем данные об уже имеющихся моделях и сохраняем данные о них
var path = selectedPath.Replace(Application.dataPath, "Assets");
AssetDatabase.CreateFolder(path, "Prefabs"); // TODO проверять что папки нет.
// Здесь проходим циклом по всем моделям внутри нашего объекта
// Проверяем что подходящего префаба нет (Если он есть тогда удаляем объект и ставим в его координатах нужный префаб)
// Если префаба нет то сначала сохраняем его (А также при необходимости меш и материал) в нужной папке и потом заменяем объект префабом.
Clone(rootObject, path + @"/Prefabs");
}
private static void Clone(GameObject go, string folder)
{
var transform = go.transform;
var papa = new GameObject();
papa.transform.SetParent(transform.parent);
papa.name = go.name.Replace(" ", "");
papa.transform.localScale = transform.localScale;
var clone = Instantiate(go, papa.transform);
var mesh = clone.GetComponent<MeshFilter>().sharedMesh;
clone.transform.localScale = Vector3.one;
var verticalPosition = (mesh.bounds.extents.y - mesh.bounds.center.y) / 2;
clone.transform.localPosition = Vector3.up * verticalPosition;
PrefabUtility.SaveAsPrefabAsset(papa, folder + @"/" + papa.name + ".prefab");
}
}