創作內容

0 GP

Unity 程式功能 (3) - 繪製扇形(Mesh Ver)

作者:三角形│2020-11-17 17:40:07│巴幣:0│人氣:98
public class DrawSector : MonoBehaviour {

    public float Radius = 6; // 外半徑
    public float innerRadius = 3; // 內半徑
    public float angleDegree = 360; // 扇形或扇面角度
    public int Segments = 60; // 分割數
    public MeshFilter meshFilter;

    private void Start() {
        meshFilter = GetComponent<MeshFilter>();
    }

    private void Update() {
        meshFilter.mesh = CreateMesh(Radius, innerRadius, angleDegree, Segments);
    }

    Mesh CreateMesh(float radius, float innerRadius, float angledegree, int segments) {

        // vertices(頂點):
        int vertices_count = segments * 2 + 2; // 因為vertices(頂點)的個數與triangles(索引三角形個數)必須匹配
        Vector3[] vertices = new Vector3[vertices_count];
        float angleRad = Mathf.Deg2Rad * angledegree;
        float angleCur = angleRad;
        float angledelta = angleRad / segments;
        for (int i = 0; i < vertices_count; i += 2) {
            float cosA = Mathf.Cos(angleCur);
            float sinA = Mathf.Sin(angleCur);
            vertices[i] = new Vector3(radius * cosA, 0, radius * sinA);
            vertices[i + 1] = new Vector3(innerRadius * cosA, 0, innerRadius * sinA);
            angleCur -= angledelta;
        }

        // triangles:
        int triangle_count = segments * 6;
        int[] triangles = new int[triangle_count];
        for (int i = 0, vi = 0; i < triangle_count; i += 6, vi += 2) {
            triangles[i] = vi;
            triangles[i + 1] = vi + 3;
            triangles[i + 2] = vi + 1;
            triangles[i + 3] = vi + 2;
            triangles[i + 4] = vi + 3;
            triangles[i + 5] = vi;
        }

        // uv:
        Vector2[] uvs = new Vector2[vertices_count];
        for (int i = 0; i < vertices_count; i++) {
            uvs[i] = new Vector2(vertices[i].x / radius / 2 + 0.5f, vertices[i].y / radius / 2 + 0.5f);
        }

        // 負載屬性於 mesh
        Mesh mesh = new Mesh();
        mesh.vertices = vertices;
        mesh.triangles = triangles;
        mesh.uv = uvs;
        return mesh;
    }

}

參考資料: https://gameinstitute.qq.com/community/detail/128550
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4984433
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★denny95090 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:遊戲設計練習(1)... 後一篇:Unity 程式功能 (...

追蹤私訊切換新版閱覽

作品資料夾

god44675566喜歡動畫的你
有許多動畫心得與點評出爐囉~ 可以上我的YT去看看,不知道會不會有你喜歡的呢?看更多我要大聲說昨天20:21


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】