コード例 #1
0
    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);
        }
    }
コード例 #2
0
    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();
    }