summaryrefslogtreecommitdiff
path: root/VRCSDK3Worlds/Assets/MeshBaker/scripts/MB3_BatchPrefabBaker.cs
diff options
context:
space:
mode:
Diffstat (limited to 'VRCSDK3Worlds/Assets/MeshBaker/scripts/MB3_BatchPrefabBaker.cs')
-rw-r--r--VRCSDK3Worlds/Assets/MeshBaker/scripts/MB3_BatchPrefabBaker.cs70
1 files changed, 70 insertions, 0 deletions
diff --git a/VRCSDK3Worlds/Assets/MeshBaker/scripts/MB3_BatchPrefabBaker.cs b/VRCSDK3Worlds/Assets/MeshBaker/scripts/MB3_BatchPrefabBaker.cs
new file mode 100644
index 00000000..1815ec66
--- /dev/null
+++ b/VRCSDK3Worlds/Assets/MeshBaker/scripts/MB3_BatchPrefabBaker.cs
@@ -0,0 +1,70 @@
+using UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using DigitalOpus.MB.Core;
+
+public class MB3_BatchPrefabBaker : MonoBehaviour {
+ public MB2_LogLevel LOG_LEVEL = MB2_LogLevel.info;
+
+ [System.Serializable]
+ public class MB3_PrefabBakerRow{
+ public GameObject sourcePrefab;
+ public GameObject resultPrefab;
+ }
+
+ public MB3_PrefabBakerRow[] prefabRows = new MB3_PrefabBakerRow[0];
+
+ public string outputPrefabFolder = "";
+
+ [ContextMenu("Create Instances For Prefab Rows")]
+ public void CreateSourceAndResultPrefabInstances()
+ {
+#if UNITY_EDITOR
+ // instantiate the prefabs
+ List<GameObject> srcPrefabs = new List<GameObject>();
+ List<GameObject> resultPrefabs = new List<GameObject>();
+ for (int i = 0; i < prefabRows.Length; i++)
+ {
+ if (prefabRows[i].sourcePrefab != null && prefabRows[i].resultPrefab != null)
+ {
+ GameObject src = (GameObject)UnityEditor.PrefabUtility.InstantiatePrefab(prefabRows[i].sourcePrefab);
+ GameObject result = (GameObject)UnityEditor.PrefabUtility.InstantiatePrefab(prefabRows[i].resultPrefab);
+ srcPrefabs.Add(src);
+ resultPrefabs.Add(result);
+ }
+ }
+
+ Vector3 offsetX = new Vector3(2, 0, 0);
+
+ // layout the prefabs
+ GameObject srcRoot = new GameObject("SourcePrefabInstances");
+ GameObject resultRoot = new GameObject("ResultPrefabInstance");
+
+ Vector3 srcPos = Vector3.zero - offsetX;
+ Vector3 resultPos = Vector3.zero + offsetX;
+ for (int i = 0; i < srcPrefabs.Count; i++)
+ {
+ Renderer[] rs = srcPrefabs[i].GetComponentsInChildren<Renderer>(true);
+ Bounds b = new Bounds(Vector3.zero, Vector3.one);
+ if (rs.Length > 0)
+ {
+ b = rs[0].bounds;
+ for (int bndsIdx = 1; bndsIdx < rs.Length; bndsIdx++)
+ {
+ b.Encapsulate(rs[bndsIdx].bounds);
+ }
+ }
+
+ srcPrefabs[i].transform.parent = srcRoot.transform;
+ resultPrefabs[i].transform.parent = resultRoot.transform;
+ srcPrefabs[i].transform.localPosition = srcPos + new Vector3(-b.extents.x, 0, b.extents.z + b.extents.z * .3f);
+ resultPrefabs[i].transform.localPosition = resultPos + new Vector3(b.extents.x, 0, b.extents.z + b.extents.z * .3f);
+ srcPos += new Vector3(0,0,b.size.z + 1f);
+ resultPos += new Vector3(0, 0, b.size.z + 1f);
+ }
+#else
+ Debug.LogError("Cannot be used outside the editor");
+#endif
+ }
+
+}