private static BigCombineInstance MakeInstance(CapsuleCollider c, Bounds bounds) { BigCombineInstance ci = new BigCombineInstance(); ci.transform = c.gameObject.transform.localToWorldMatrix; ci.bigMesh = new BigMesh(PrimitiveType.Capsule); Vector3 dir = Vector3.forward; if (c.direction == 0) { dir = Vector3.right; } else if (c.direction == 1) { dir = Vector3.up; } ci.transform = ci.transform * Matrix4x4.TRS( c.center, Quaternion.FromToRotation(Vector3.up, dir), new Vector3( c.radius / 0.5f, (c.height + 2 * c.radius) / 3, c.radius / 0.5f)); return(ci); }
private static BigCombineInstance MakeInstance(MeshCollider c, Bounds bounds) { Mesh m = c.sharedMesh; BigCombineInstance ci = new BigCombineInstance(); ci.bigMesh = new BigMesh(m); ci.transform = c.gameObject.transform.localToWorldMatrix; return(ci); }
private static BigCombineInstance MakeInstance(SphereCollider c, Bounds bounds) { BigCombineInstance ci = new BigCombineInstance(); ci.transform = c.gameObject.transform.localToWorldMatrix; ci.bigMesh = new BigMesh(PrimitiveType.Sphere); ci.transform = ci.transform * Matrix4x4.TRS( c.center, Quaternion.identity, Vector3.one * c.radius / 0.5f); return(ci); }
private static BigCombineInstance MakeInstance(BoxCollider c, Bounds bounds) { BigCombineInstance ci = new BigCombineInstance(); ci.transform = c.gameObject.transform.localToWorldMatrix; ci.bigMesh = new BigMesh(PrimitiveType.Cube); ci.transform = ci.transform * Matrix4x4.TRS( c.center, Quaternion.identity, c.extents * 2); return(ci); }
private static BigCombineInstance MakeInstance(TerrainCollider c, Bounds bounds) { Bounds localBounds = new Bounds( bounds.center - c.transform.position, bounds.size); BigCombineInstance ci = new BigCombineInstance(); ci.bigMesh = new BigMesh(((TerrainCollider)c).terrainData, localBounds); ci.transform = Matrix4x4.TRS( c.transform.position, Quaternion.identity, Vector3.one); return(ci); }
public BigMesh(BigCombineInstance[] instances) { int numVerts = 0; int numIndices = 0; foreach(BigCombineInstance bci in instances) { numVerts += bci.bigMesh.vertices.Length; numIndices += bci.bigMesh.triangles.Length; } this.vertices = new Vector3[numVerts]; this.triangles = new int[numIndices]; int vertBase = 0; int indexBase = 0; foreach (BigCombineInstance bci in instances) { Vector3[] vertIn = bci.bigMesh.vertices; for (int iv = 0; iv < vertIn.Length; iv++) vertices[vertBase + iv] = bci.transform.MultiplyPoint3x4(vertIn[iv]); int[] triIn = bci.bigMesh.triangles; for (int ii=0; ii<triIn.Length; ii++) triangles[indexBase + ii] = triIn[ii] + vertBase; vertBase += bci.bigMesh.vertices.Length; indexBase += bci.bigMesh.triangles.Length; } }
private static BigCombineInstance MakeInstance(SphereCollider c, Bounds bounds) { BigCombineInstance ci = new BigCombineInstance(); ci.transform = c.gameObject.transform.localToWorldMatrix; ci.bigMesh = new BigMesh(PrimitiveType.Sphere); ci.transform = ci.transform * Matrix4x4.TRS( c.center, Quaternion.identity, Vector3.one * c.radius / 0.5f); return ci; }
private static BigCombineInstance MakeInstance(CapsuleCollider c, Bounds bounds) { BigCombineInstance ci = new BigCombineInstance(); ci.transform = c.gameObject.transform.localToWorldMatrix; ci.bigMesh = new BigMesh(PrimitiveType.Capsule); Vector3 dir = Vector3.forward; if (c.direction == 0) dir = Vector3.right; else if (c.direction == 1) dir = Vector3.up; ci.transform = ci.transform * Matrix4x4.TRS( c.center, Quaternion.FromToRotation(Vector3.up, dir), new Vector3( c.radius / 0.5f, (c.height + 2 * c.radius) / 3, c.radius / 0.5f)); return ci; }
private static BigCombineInstance MakeInstance(BoxCollider c, Bounds bounds) { BigCombineInstance ci = new BigCombineInstance(); ci.transform = c.gameObject.transform.localToWorldMatrix; ci.bigMesh = new BigMesh(PrimitiveType.Cube); ci.transform = ci.transform * Matrix4x4.TRS( c.center, Quaternion.identity, c.extents * 2); return ci; }
private static BigCombineInstance MakeInstance(TerrainCollider c, Bounds bounds) { Bounds localBounds = new Bounds( bounds.center - c.transform.position, bounds.size); BigCombineInstance ci = new BigCombineInstance(); ci.bigMesh = new BigMesh(((TerrainCollider)c).terrainData, localBounds); ci.transform = Matrix4x4.TRS( c.transform.position, Quaternion.identity, Vector3.one); return ci; }
private static BigCombineInstance MakeInstance(MeshCollider c, Bounds bounds) { Mesh m = c.sharedMesh; BigCombineInstance ci = new BigCombineInstance(); ci.bigMesh = new BigMesh(m); ci.transform = c.gameObject.transform.localToWorldMatrix; return ci; }