• Unity中使用自定义mesh和UImesh


    自定义Mesh

    1. public float width = 1;
    2. public float height = 1;
    3. public void CreateMesh()
    4. {
    5. MeshRenderer meshRenderer = gameObject.GetComponent();
    6. meshRenderer.sharedMaterial = new Material(Shader.Find("Standard"));
    7. MeshFilter meshFilter = gameObject.GetComponent();
    8. Mesh mesh = new Mesh();
    9. Vector3[] vertices = new Vector3[4]
    10. {
    11. new Vector3(0, 0, 0),
    12. new Vector3(width, 0, 0),
    13. //new Vector3(0, height, 0),
    14. Quaternion.Euler(0,0,60)* Vector3.up *2,
    15. new Vector3(width, height, 0)
    16. };
    17. mesh.vertices = vertices;
    18. int[] tris = new int[6]
    19. {
    20. // 左下方三角形
    21. 0, 2, 1,
    22. // 右上方三角形
    23. 2, 3, 1
    24. };
    25. mesh.triangles = tris;
    26. Vector3[] normals = new Vector3[4]
    27. {
    28. -Vector3.forward,
    29. -Vector3.forward,
    30. -Vector3.forward,
    31. -Vector3.forward
    32. };
    33. mesh.normals = normals;
    34. Vector2[] uv = new Vector2[4]
    35. {
    36. new Vector2(0, 0),
    37. new Vector2(1, 0),
    38. new Vector2(0, 1),
    39. new Vector2(1, 1)
    40. };
    41. mesh.uv = uv;
    42. meshFilter.mesh = mesh;
    43. }

    自定义六边形UIMesh:

    1. [SerializeField] private Material radarMaterial;
    2. [SerializeField] private Texture2D radarTexture2D;
    3. [SerializeField]
    4. private CanvasRenderer radarMeshCanvasRenderer;
    5. private void UpdateStatsVisual()
    6. {
    7. Mesh mesh = new Mesh();
    8. Vector3[] vertices = new Vector3[6];
    9. Vector2[] uv = new Vector2[6];
    10. int[] triangles = new int[3 * 5];
    11. float angleIncrement = 360f / 5;
    12. float radarChartSize = 145f;
    13. Vector3 attackVertex = Quaternion.Euler(0, 0, -angleIncrement * 0) * Vector3.up * radarChartSize ;
    14. int attackVertexIndex = 1;
    15. Vector3 defenceVertex = Quaternion.Euler(0, 0, -angleIncrement * 1) * Vector3.up * radarChartSize;
    16. int defenceVertexIndex = 2;
    17. Vector3 speedVertex = Quaternion.Euler(0, 0, -angleIncrement * 2) * Vector3.up * radarChartSize;
    18. int speedVertexIndex = 3;
    19. Vector3 manaVertex = Quaternion.Euler(0, 0, -angleIncrement * 3) * Vector3.up * radarChartSize;
    20. int manaVertexIndex = 4;
    21. Vector3 healthVertex = Quaternion.Euler(0, 0, -angleIncrement * 4) * Vector3.up * radarChartSize;
    22. int healthVertexIndex = 5;
    23. vertices[0] = Vector3.zero;
    24. vertices[attackVertexIndex] = attackVertex;
    25. vertices[defenceVertexIndex] = defenceVertex;
    26. vertices[speedVertexIndex] = speedVertex;
    27. vertices[manaVertexIndex] = manaVertex;
    28. vertices[healthVertexIndex] = healthVertex;
    29. uv[0] = Vector2.zero;
    30. uv[attackVertexIndex] = Vector2.one;
    31. uv[defenceVertexIndex] = Vector2.one;
    32. uv[speedVertexIndex] = Vector2.one;
    33. uv[manaVertexIndex] = Vector2.one;
    34. uv[healthVertexIndex] = Vector2.one;
    35. triangles[0] = 0;
    36. triangles[1] = attackVertexIndex;
    37. triangles[2] = defenceVertexIndex;
    38. triangles[3] = 0;
    39. triangles[4] = defenceVertexIndex;
    40. triangles[5] = speedVertexIndex;
    41. triangles[6] = 0;
    42. triangles[7] = speedVertexIndex;
    43. triangles[8] = manaVertexIndex;
    44. triangles[9] = 0;
    45. triangles[10] = manaVertexIndex;
    46. triangles[11] = healthVertexIndex;
    47. triangles[12] = 0;
    48. triangles[13] = healthVertexIndex;
    49. triangles[14] = attackVertexIndex;
    50. mesh.vertices = vertices;
    51. mesh.uv = uv;
    52. mesh.triangles = triangles;
    53. radarMeshCanvasRenderer.SetMesh(mesh);
    54. radarMeshCanvasRenderer.SetMaterial(radarMaterial, radarTexture2D);
    55. }

    参考链接:

    Example: creating a quad - Unity 手册

    https://www.youtube.com/watch?v=twjMW7CxIKk&list=RDCMUCFK6NCbuCIVzA6Yj1G_ZqCg&index=2

  • 相关阅读:
    【华为HCIP | 华为数通工程师】ISIS 高频题(1)
    数据库概论(简单介绍)
    齐岳|脂质体磷酸钙纳米粒RNA核糖核酸|淫羊藿苷固体纳米脂质体(ICA-SLN)修饰负载RNA核糖核酸
    JMeter(三十九):selenium怪异的UI自动化测试组合
    亚像素源码
    【Linux】基础IO —— 动静态库的制作与使用
    GPDB vs CK - NYC taxi data 简单测试对比
    LeetCode算法题解(回溯,难点)|LeetCode37. 解数独
    如何在Sage X3 ERP中使用集装箱管理和物流跟踪
    配置 身份验证 的 Squid代理服务器
  • 原文地址:https://blog.csdn.net/weixin_50702814/article/details/133390735