public static Bounds CreateProxies(GameObject go, PropTools.Prop prop) { List<Mesh> proxyMeshes = new List<Mesh>(); List<Material> proxyMaterials = new List<Material>(); GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); MeshFilter cubeMF = cube.GetComponent<MeshFilter>(); Mesh cubeMesh = cubeMF.sharedMesh; foreach (PropTools.Proxy proxy in prop.proxies) { Vector3[] verts = cubeMesh.vertices; for (int i = 0; i < verts.Length; i++) { verts[i].Scale(proxy.size); verts[i] += proxy.center; } Mesh proxyMesh = new Mesh(); proxyMesh.vertices = verts; proxyMesh.triangles = cubeMesh.triangles; proxyMesh.uv = cubeMesh.uv; proxyMesh.normals = cubeMesh.normals; Material proxyMat = new Material(Shader.Find("Diffuse")); proxyMat.color = proxy.color; proxyMat.hideFlags = HideFlags.HideInInspector | HideFlags.NotEditable; proxyMeshes.Add(proxyMesh); proxyMaterials.Add(proxyMat); } CombineInstance[] cI = new CombineInstance[proxyMeshes.Count]; for (int i = 0; i < proxyMeshes.Count; i++) { cI[i].mesh = proxyMeshes[i]; } Mesh combinedMesh = new Mesh(); combinedMesh.CombineMeshes(cI, false, false); combinedMesh.RecalculateBounds(); MeshFilter mf = go.AddComponent<MeshFilter>(); mf.hideFlags = HideFlags.HideInInspector | HideFlags.NotEditable; mf.sharedMesh = combinedMesh; MeshRenderer mr = go.AddComponent<MeshRenderer>(); mr.hideFlags = HideFlags.HideInInspector | HideFlags.NotEditable; mr.sharedMaterials = proxyMaterials.ToArray(); DestroyImmediate(cube); for (int i = 0; i < proxyMeshes.Count; i++) { DestroyImmediate(proxyMeshes[i]); } return combinedMesh.bounds; }
public static PropObject Create(Transform parent, PropTools.Prop prop) { GameObject newPropGO = new GameObject(); newPropGO.name = prop.propName; newPropGO.transform.parent = parent; PropObject newProp = newPropGO.AddComponent<PropObject>(); newProp.prop = prop; Bounds propBounds = CreateProxies(newPropGO, prop); BoxCollider collider = newPropGO.AddComponent<BoxCollider>(); collider.hideFlags = HideFlags.HideInInspector | HideFlags.NotEditable; collider.center = propBounds.center; collider.size = propBounds.size; return newProp; }
private void CheckGUISetup() { if (window == null) { window = this; } if (propTools == null) { propTools = (PropTools)FindObjectOfType(typeof(PropTools)); if (propTools == null) { GameObject newObject = new GameObject(); newObject.name = "PropTools"; newObject.transform.position = Vector3.zero; newObject.transform.rotation = Quaternion.identity; newObject.transform.localScale = Vector3.one; propTools = newObject.AddComponent<PropTools>(); } } }
private void CheckGUISetup() { if (window == null) { window = this; } if (propTools == null) { propTools = (PropTools)FindObjectOfType(typeof(PropTools)); if (propTools == null) { GameObject newObject = new GameObject(); newObject.name = "PropTools"; newObject.transform.position = Vector3.zero; newObject.transform.rotation = Quaternion.identity; newObject.transform.localScale = Vector3.one; propTools = newObject.AddComponent <PropTools>(); } } }