Unity-自定义Mesh绘制最简单的三角形

using UnityEditor;
using UnityEngine;

[RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class Mesh_RectangleTest : MonoBehaviour
{

    private float sideLength = 2;//边长
    private float angleDegree = 45;//角度
    private MeshFilter m_MeshFilter;
    private MeshRenderer m_MeshRenderer;
    void Start()
    {
        m_MeshFilter = GetComponent<MeshFilter>();
        m_MeshRenderer = GetComponent<MeshRenderer>();
        //绘制了一个等腰三角形
        m_MeshFilter.mesh = CreateMesh();
        m_MeshRenderer.material = CreateMaterial();
    }

    private Material CreateMaterial()
    {
        Material material = new Material(Shader.Find("Transparent/Diffuse"));
        Texture2D texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/11.png");
        material.mainTexture = texture;
        return material;
    }

    private Mesh CreateMesh()
    {
        Mesh mesh = new Mesh();
        Vector3[] vertices = new Vector3[4];
        float angle = Mathf.Deg2Rad * angleDegree;
        float cosA = Mathf.Cos(angle);
        float sinA = Mathf.Sin(angle);

        float halfOfBaseSide = cosA * sideLength;
        float height = sinA * sideLength;
        //设置顶点
        vertices[0] = Vector3.zero;
        vertices[1] = new Vector3(halfOfBaseSide, -height, 0);
        vertices[2] = new Vector3(-halfOfBaseSide, -height, 0);
        vertices[3] = new Vector3(halfOfBaseSide * 2, 0, 0);
        mesh.vertices = vertices;

        //三角形列表,保存的是对应顶点数组的索引
        int[] triangles = new int[6];
        //顺时针绘制正面,逆时针绘制反面
        //左下三角形
        triangles[0] = 0;
        triangles[1] = 1;
        triangles[2] = 2;
        //右上三角形
        triangles[3] = 0;
        triangles[4] = 3;
        triangles[5] = 1;
        mesh.triangles = triangles;

        //uv是uv纹理坐标的简称
        //UV就是将图像上每一个点精确对应到模型物体的表面, 在点与点之间的间隙位置由软件进行图像光滑插值处理. 这就是所谓的UV贴图
        //uv坐标系是以左下角为(0,0),右上角为(1,1)的坐标系
        Vector2[] uvs = new Vector2[vertices.Length];
        uvs[0] = Vector2.zero;
        uvs[1] = Vector2.right;
        uvs[2] = Vector2.up;
        uvs[3] = Vector2.one;
        mesh.uv = uvs;

        //设置法线
        Vector3[] normals = new Vector3[vertices.Length];
        normals[0] = Vector3.forward;
        normals[1] = Vector3.forward;
        normals[2] = Vector3.forward;
        normals[3] = Vector3.forward;
        mesh.normals = normals;

        mesh.name = "triangle";
        return mesh;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过在Unity中使用Mesh绘制圆角三角形。下面是一个简单的示例代码,演示如何创建一个圆角三角形Mesh: ```csharp using UnityEngine; public class RoundedTriangle : MonoBehaviour { public float radius = 1f; public int segments = 30; void Start() { MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>(); MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>(); Mesh mesh = new Mesh(); meshFilter.mesh = mesh; Vector3[] vertices = new Vector3[segments + 2]; int[] triangles = new int[segments * 3]; vertices[0] = Vector3.zero; // 中心点 float angleIncrement = 360f / segments; float currentAngle = 0f; for (int i = 1; i < segments + 2; i++) { float x = Mathf.Cos(Mathf.Deg2Rad * currentAngle) * radius; float y = Mathf.Sin(Mathf.Deg2Rad * currentAngle) * radius; vertices[i] = new Vector3(x, y, 0f); currentAngle += angleIncrement; } for (int i = 0; i < segments; i++) { triangles[i * 3] = 0; triangles[i * 3 + 1] = i + 1; triangles[i * 3 + 2] = i + 2; } mesh.vertices = vertices; mesh.triangles = triangles; mesh.RecalculateNormals(); // 可以在这里设置材质等其他属性 } } ``` 将脚本挂载到一个空的GameObject上,然后在Inspector面板中调整radius和segments属性来控制圆角三角形的大小和分段数。运行游戏后,你将在场景中看到绘制的圆角三角形。 注意:此示例仅绘制了一个平面的圆角三角形,如果你需要在3D空间中绘制一个具有深度的圆角三角形,你可能需要使用更复杂的算法来生成相应的顶点和三角形

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值