{"id":13663542,"url":"https://github.com/mogoson/MGS.SkinnedMesh","last_synced_at":"2025-04-25T17:31:25.675Z","repository":{"id":184458919,"uuid":"125886607","full_name":"mogoson/MGS.SkinnedMesh","owner":"mogoson","description":"Unity plugin for create skinned mesh in scene.","archived":false,"fork":false,"pushed_at":"2024-07-18T15:55:47.000Z","size":14886,"stargazers_count":81,"open_issues_count":0,"forks_count":17,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-08-03T05:18:46.568Z","etag":null,"topics":["bezier","curve","helix","hermite","hose","mesh","polygon","prism","skinned","uv"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mogoson.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-03-19T16:17:34.000Z","updated_at":"2024-07-27T08:45:02.000Z","dependencies_parsed_at":"2023-07-28T14:49:10.704Z","dependency_job_id":null,"html_url":"https://github.com/mogoson/MGS.SkinnedMesh","commit_stats":null,"previous_names":["mogoson/mgs.skinnedmesh"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mogoson%2FMGS.SkinnedMesh","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mogoson%2FMGS.SkinnedMesh/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mogoson%2FMGS.SkinnedMesh/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mogoson%2FMGS.SkinnedMesh/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mogoson","download_url":"https://codeload.github.com/mogoson/MGS.SkinnedMesh/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224011498,"owners_count":17240944,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bezier","curve","helix","hermite","hose","mesh","polygon","prism","skinned","uv"],"created_at":"2024-08-02T05:02:30.210Z","updated_at":"2024-11-10T20:30:49.884Z","avatar_url":"https://github.com/mogoson.png","language":"C#","funding_links":[],"categories":["C\\#"],"sub_categories":[],"readme":"[TOC]\n\n# MGS.SkinnedMesh\n\n## Summary\n\n- Unity plugin for create skinned mesh in scene.\n\n## Environment\n\n- .Net Framework 3.5 or above.\n- Unity 5.0 or above.\n\n## Platform\n\n- Windows\n\n## Version\n\n- 1.2.1\n\n## Technology\n\n### Build Vertices\n\n```C#\n//Create polygon vertices.\nvar vertices = new List\u003cVector3\u003e();\nvar sector = 2 * Mathf.PI / edge;\nvar radian = 0f;\nfor (int i = 0; i \u003c= edge; i++)\n{\n    radian = sector * i;\n    vertices.Add(center + rotation * new Vector3(Mathf.Cos(radian), Mathf.Sin(radian)) * radius);\n}\nreturn vertices;\n```\n\n### Build Triangles\n\n```C#\n//Create polygon triangles index base on center vertice.\nvar triangles = new List\u003cint\u003e();\nvar offset = clockwise ? 0 : 1;\nfor (int i = 0; i \u003c edge; i++)\n{\n    triangles.Add(start + i + offset);\n    triangles.Add(start + i - offset + 1);\n    triangles.Add(center);\n}\nreturn triangles;\n\n//Create prism triangles index.\nvar triangles = new List\u003cint\u003e();\nvar polygonVs = polygon + 1;\nvar currentSegment = 0;\nvar nextSegment = 0;\nfor (int s = 0; s \u003c segment - 1; s++)\n{\n    // Calculate start index.\n    currentSegment = polygonVs * s;\n    nextSegment = polygonVs * (s + 1);\n    for (int p = 0; p \u003c polygon; p++)\n    {\n        // Left-Bottom triangle.\n        triangles.Add(start + currentSegment + p);\n        triangles.Add(start + currentSegment + p + 1);\n        triangles.Add(start + nextSegment + p + 1);\n\n        // Right-Top triangle.\n        triangles.Add(start + currentSegment + p);\n        triangles.Add(start + nextSegment + p + 1);\n        triangles.Add(start + nextSegment + p);\n    }\n}\nreturn triangles;\n```\n\n### Build UV\n\n```C#\n//Create polygon uv.\nvar uv = new List\u003cVector2\u003e();\nvar sector = 2 * Mathf.PI / edge;\nvar radian = 0f;\nvar center = Vector2.one * 0.5f;\nfor (int i = 0; i \u003c= edge; i++)\n{\n    radian = sector * (clockwise ? i : edge - i);\n    uv.Add(center + new Vector2(Mathf.Cos(radian), Mathf.Sin(radian)) * 0.5f);\n}\nreturn uv;\n\n//Create prism uv.\nvar uv = new List\u003cVector2\u003e();\nvar polygonVs = polygon + 1;\nvar vertices = polygonVs * segment;\nvar slice = 1.0f / polygon;\nvar u = 0f;\nvar v = 0f;\nfor (int i = 0; i \u003c vertices; i++)\n{\n    u = slice * (i % polygonVs);\n    v = (i / polygonVs) % 2;\n    uv.Add(new Vector2(u, v));\n}\nreturn uv;\n```\n\n### Build Mesh\n\n```C#\n//Rebuild the mesh of hose.\nmesh.vertices = CreateVertices(curve, segments, differ, isSeal);\nmesh.uv = CreateUV(segments, isSeal);\nmesh.triangles = CreateTriangles(segments, isSeal);\n\nmesh.RecalculateNormals();\n#if UNITY_5_6_OR_NEWER\nmesh.RecalculateTangents();\n#endif\nmesh.RecalculateBounds();\n```\n\n### Shared Mesh\n\n```C#\nmeshRenderer.sharedMesh = mesh;\nmeshRenderer.localBounds = mesh.bounds;\nif (meshCollider)\n{\n    meshCollider.sharedMesh = null;\n    meshCollider.sharedMesh = mesh;\n}\n```\n\n### Combine Mesh\n\n```C#\nvar combines = new List\u003cCombineInstance\u003e();\nforeach (var filter in filters)\n{\n    var pos = filter.transform.position - center;\n    var combine = new CombineInstance\n    {\n        mesh = filter.sharedMesh,\n        transform = Matrix4x4.TRS(pos, filter.transform.rotation, filter.transform.lossyScale)\n    };\n    combines.Add(combine);\n}\nvar rebornMesh = new Mesh();\nrebornMesh.CombineMeshes(combines.ToArray(), mergeSubMeshes);\n\n#if !UNITY_5_5_OR_NEWER\n    //Mesh.Optimize was removed in version 5.5.2p4.\n    rebornMesh.Optimize();\n#endif\n```\n\n## Usage\n\n### Curve Hose\n\n- Attach mono curve component to a game object.\n\n  ```tex\n  MonoHermiteCurve MonoBezierCurve MonoHelixCurve MonoEllipseCurve MonoSinCurve\n  ```\n\n- Attach mono curve hose component to the game object.\n\n  ```tex\n  MonoCurveSkinnedHose\n  ```\n\n- Rebuild mono curve runtime, and mono curve hose component will auto Rebuild.\n\n```C#\nvar curve = GetComponent\u003cMonoHermiteCurve\u003e();\ncurve.AddAnchor(new HermiteAnchor(point));\ncurve.Rebuild();//The mono curve hose component will auto Rebuild.\n```\n\n------\n\nCopyright © 2021 Mogoson.\tmogoson@outlook.com","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmogoson%2FMGS.SkinnedMesh","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmogoson%2FMGS.SkinnedMesh","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmogoson%2FMGS.SkinnedMesh/lists"}