void Awake() { // box = this.GetComponent<Transform>(); cube = new HyperCubeMesh(center); #region Faces faces = new int[] { 4, 0, 8, 12, 6, 2, 10, 14, 5, 1, 9, 13, 7, 3, 11, 15, 2, 0, 8, 10, 6, 4, 12, 14, 3, 1, 9, 11, 7, 5, 13, 15, 2, 0, 4, 6, 10, 8, 12, 14, 3, 1, 5, 7, 11, 9, 13, 15, 1, 0, 8, 9, 5, 4, 12, 13, 3, 2, 10, 11, 7, 6, 14, 15, 1, 0, 4, 5, 9, 8, 12, 13, 3, 2, 6, 7, 11, 10, 14, 15, 1, 0, 2, 3, 9, 8, 10, 11, 5, 4, 6, 7, 13, 12, 14, 15 }; vertices = new Vector3[16]; for (int i = 0; i < 16; i++) { vertices[i] = cube.get3dver(i); } Mesh tmp = new Mesh(); updatevertices(tmp); #endregion mesh = new Mesh(); for (int i = 0; i < 16; i++) { vertices[i] = cube.get3dver(i); } mesh.vertices = vertices; mesh.SetIndices(faces, MeshTopology.Quads, 0); mesh.RecalculateBounds(); mesh.Optimize(); mesh.SetTriangles(mesh.GetTriangles(0), 0); GetComponent <MeshFilter>().mesh = mesh; GetComponent <MeshCollider>().sharedMesh = mesh; A_ = new Vector3(); B_ = new Vector3(); isTriggerPressed = false; A = new Vector4(); B = new Vector4(); radius = 1.0f; children = new GameObject[8]; }
// Update is called once per frame void Update() { for (int i = 0; i < 8; i++) { vertices[i] = hypermesh.get3dver(hyperface[i + faceindex * 8]); } if (isTriggerPressed) { Vector3 relapos = new Vector3(); relapos = (_B - box.position) * 8f / 3f; float r = (float)Math.Sqrt(relapos.x * relapos.x + relapos.y * relapos.y + relapos.z * relapos.z); if (r < radius) { B = new Vector4(relapos.x, relapos.y, relapos.z, (float)Math.Sqrt(radius * radius - relapos.x * relapos.x - relapos.y * relapos.y - relapos.z * relapos.z)); } else { //float length = relapos.magnitude; Vector3 Q = (radius / r) * relapos; relapos = Q + box.position; B = new Vector4(Q.x, Q.y, Q.z, 0f); } UpdateRotation(hypermesh); A = B; } mesh.vertices = vertices; mesh.SetIndices(faces, MeshTopology.Quads, 0); mesh.RecalculateBounds(); mesh.Optimize(); }
void updatevertices(Mesh mesh) { for (int i = 0; i < 16; i++) { vertices[i] = cube.get3dver(i); } mesh.vertices = vertices; mesh.SetIndices(faces, MeshTopology.Quads, 0); mesh.RecalculateBounds(); mesh.Optimize(); mesh.SetTriangles(mesh.GetTriangles(0), 0); GetComponent <MeshCollider>().sharedMesh = null; GetComponent <MeshCollider>().sharedMesh = mesh; }
public void Renew() { hypermesh = new HyperCubeMesh(center); vertices = new Vector3[8]; for (int i = 0; i < 8; i++) { vertices[i] = hypermesh.get3dver(hyperface[i + faceindex * 8]); } mesh.vertices = vertices; mesh.SetIndices(faces, MeshTopology.Quads, 0); mesh.RecalculateBounds(); mesh.Optimize(); UpdateRotation(hypermesh); }
// Use this for initialization void Awake() { faceindex = 0; _A = new Vector3(); _B = new Vector3(); isTriggerPressed = false; A = new Vector4(); B = new Vector4(); center = new Vector4(); radius = 1.0f; //Setup the radius of the sphere collider hypermesh = new HyperCubeMesh(center); vertices = new Vector3[8]; hyperface = new int[] { 1, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 10, 12, 14, 2, 3, 6, 7, 10, 11, 14, 15, 0, 1, 4, 5, 8, 9, 12, 13, 4, 5, 6, 7, 12, 13, 14, 15, 0, 1, 2, 3, 8, 9, 10, 11, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 }; for (int i = 0; i < 8; i++) { vertices[i] = hypermesh.get3dver(hyperface[i + faceindex * 8]); } mesh = new Mesh(); faces = new int[24] { 2, 0, 4, 6, 3, 1, 5, 7, 1, 0, 4, 5, 3, 2, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7 }; mesh.vertices = vertices; mesh.SetIndices(faces, MeshTopology.Quads, 0); mesh.RecalculateBounds(); mesh.Optimize(); GetComponent <MeshFilter>().mesh = mesh; }