private IEnumerator AnimateCorner(int point) { ResetParts(Points[point].transform, false, false, true); GameObject torus = MakeTorus.GenerateTube(HeadSize, 1, true, 0, 0.1f); Vector3 origin = Points[point].transform.position; origin.x -= HeadSize; torus.transform.position = origin; torus.transform.rotation = Points[point].transform.rotation; MeshFilter filter = torus.GetComponent <MeshFilter>(); float angle = 0; float t = 0; Vector3 pivot = origin; pivot.y += HeadSize; Vector3 rotationOffset = new Vector3(0, -HeadSize, 0); float cornerSpeed = MoveSpeed * Mathf.PI * HeadSize * 0.5f; while (t < cornerSpeed) { angle = 90 * (t / cornerSpeed); MakeTorus.GenerateMesh(filter, HeadSize, 1, true, 0, angle); endCap.transform.rotation = Points[point].transform.rotation * Quaternion.Euler(angle, 0, 0); endCap.transform.position = pivot + (Quaternion.Euler(0, 0, angle) * rotationOffset); yield return(null); t += Time.deltaTime; } MakeTorus.GenerateMesh(filter, HeadSize, 1, true, 0, 90); StartCoroutine(AnimateEnd(point)); }
private IEnumerator AnimateCorner(Vector3 position, Quaternion rotation) { ResetParts(position, rotation, false, false, true); GameObject torus = MakeTorus.GenerateTube(Size, 1, true, 0, 0.1f); torus.GetComponent <MeshRenderer>().material = Material; torus.transform.parent = PipeParent.transform; Vector3 origin = position - (rotation * (Vector3.left * Size)); torus.transform.localPosition = origin; torus.transform.localRotation = rotation * Quaternion.Euler(0, 0, 90) * Quaternion.Euler(-90, 0, 0); MeshFilter filter = torus.GetComponent <MeshFilter>(); float angle = 0; float t = 0; Vector3 pivot = origin + (rotation * (Vector3.forward * Size)); float cornerSpeed = Speed * Mathf.PI * Size * 0.5f; while (t < cornerSpeed) { angle = 90 * (t / cornerSpeed); MakeTorus.GenerateMesh(filter, Size, 1, true, 0, angle); endCap.transform.localRotation = torus.transform.localRotation * Quaternion.Euler(angle, 0, 0); endCap.transform.localPosition = pivot + (endCap.transform.localRotation * Vector3.up * Size); yield return(null); t += Time.deltaTime; } MakeTorus.GenerateMesh(filter, Size, 1, true, 0, 90); }