protected virtual void RegenerateMesh() { mesh = SgtObjectPool <Mesh> .Add(mesh, m => m.Clear()); SgtProceduralMesh.Clear(); { if (SegmentDetail >= 3) { var angleTotal = SgtHelper.Divide(Mathf.PI * 2.0f, SegmentCount); var angleStep = SgtHelper.Divide(angleTotal, SegmentDetail); var coordStep = SgtHelper.Reciprocal(SegmentDetail); for (var i = 0; i <= SegmentDetail; i++) { var coord = coordStep * i; var angle = angleStep * i; var sin = Mathf.Sin(angle); var cos = Mathf.Cos(angle); SgtProceduralMesh.PushPosition(sin * InnerRadius, 0.0f, cos * InnerRadius); SgtProceduralMesh.PushPosition(sin * OuterRadius, 0.0f, cos * OuterRadius); SgtProceduralMesh.PushNormal(Vector3.up); SgtProceduralMesh.PushNormal(Vector3.up); SgtProceduralMesh.PushCoord1(0.0f, coord); SgtProceduralMesh.PushCoord1(1.0f, coord); } } } SgtProceduralMesh.SplitStrip(HideFlags.DontSave); mesh = SgtProceduralMesh.Pop(); SgtProceduralMesh.Discard(); if (mesh != null) { var bounds = mesh.bounds; mesh.bounds = SgtHelper.NewBoundsCenter(bounds, bounds.center + bounds.center.normalized * BoundsShift); } }
protected override void RegenerateMesh() { mesh = SgtObjectPool <Mesh> .Add(mesh, m => m.Clear()); SgtProceduralMesh.Clear(); { if (SegmentDetail >= 3) { var angleTotal = SgtHelper.Divide(Mathf.PI * 2.0f, SegmentCount); var angleStep = SgtHelper.Divide(angleTotal, SegmentDetail); var coordStep = SgtHelper.Reciprocal(SegmentDetail); for (var i = 0; i <= SegmentDetail; i++) { var coord = coordStep * i; var angle = angleStep * i; var sin = Mathf.Sin(angle); var cos = Mathf.Cos(angle); var iPos = new Vector3(sin * InnerRadius, 0.0f, cos * InnerRadius); var oPos = new Vector3(sin * OuterRadius, 0.0f, cos * OuterRadius); SgtProceduralMesh.PushPosition(iPos); SgtProceduralMesh.PushPosition(oPos); SgtProceduralMesh.PushNormal(Vector3.up); SgtProceduralMesh.PushNormal(Vector3.up); SgtProceduralMesh.PushCoord1(0.0f, coord * InnerRadius); SgtProceduralMesh.PushCoord1(1.0f, coord * OuterRadius); SgtProceduralMesh.PushCoord2(InnerRadius, 0.0f); SgtProceduralMesh.PushCoord2(OuterRadius, 0.0f); } } } SgtProceduralMesh.SplitStrip(HideFlags.DontSave); mesh = SgtProceduralMesh.Pop(); SgtProceduralMesh.Discard(); }