unity 绘制多边形

1、Unity 绘制多边形


using System.Collections;


public class CreateMesh : MonoBehaviour
{
    public float length = 1;
    public Material material;
    // Use this for initialization
    void Start()
    {
        //CreateSixObj(length);
        BetterCreateMul(16, 1);
        CreateMul(5, 1);
    }
    
    /// <summary>
    /// 创建多边形
    /// </summary>
    /// <param name="len"></param>
    /// <param name="weith"></param>
    void CreateMul(int len, float weith)
    {
        GameObject obj = new GameObject("six");
        float angle = 360.0f / len;
        Vector3 dir = Vector3.zero;
        Vector3 forward = Vector3.forward;
        Vector3[] vertices = new Vector3[len + 1];
        vertices[0] = Vector3.zero;
        for (int i = 1; i < vertices.Length; i++)
        {
            var rot = Quaternion.Euler(0, angle * (i - 1), 0);
            print(rot.eulerAngles);
            dir = rot * forward;
            vertices[i] = dir * weith;
            //print(Vector3.Angle(Vector3.forward,dir));
        }
        int[] triangles = new int[(vertices.Length - 1) * 3];
        for (int i = 0; i < triangles.Length; i++)
        {
            if (i % 3 == 0)
            {
                triangles[i] = 0;
            }
            else
            {
                int z = i / 3;
                int y = i % 3;
                int f = z + y;
                if (f > vertices.Length - 1)
                {
                    f = 1;
                }
                triangles[i] = f;
            }
        }
        Vector2[] uv = new Vector2[vertices.Length];
        for (int i = 0; i < uv.Length; i++)
        {
            uv[i] = new Vector2(vertices[i].x, vertices[i].z);
        }


        MeshFilter mf = obj.AddComponent<MeshFilter>();
        Mesh mesh = new Mesh();
        mesh.vertices = vertices;
        mesh.triangles = triangles;
        mesh.uv = uv;
        mesh.RecalculateNormals();
        mesh.RecalculateBounds();
        obj.AddComponent<MeshRenderer>().material = material;
        mf.sharedMesh = mesh;
    }
    
    /// <summary>
    /// 创建多边形
    /// </summary>
    /// <param name="len"></param>
    /// <param name="weith"></param>
    void BetterCreateMul(int len, float weith)
    {
        GameObject obj = new GameObject("six");
        float angle = 360.0f / len;
        Vector3 dir = Vector3.zero;
        Vector3 forward = Vector3.forward;
        Vector3[] vertices = new Vector3[len];
        for (int i = 0; i < vertices.Length; i++)
        {
            var rot = Quaternion.Euler(0, angle * i, 0);
            dir = rot * forward;
            vertices[i] = dir * weith;
        }
        int[] triangles = new int[(vertices.Length - 2) * 3];
        for (int i = 0; i < triangles.Length; i++)
        {
            if (i % 3 == 0)
            {
                triangles[i] = vertices.Length - 1;


            }
            else
            {
                int z = (i - 1) / 3;
                int y = (i - 1) % 3;
                int f = z + y;
                triangles[i] = f;
            }
        }
        Vector2[] uv = new Vector2[vertices.Length];
        for (int i = 0; i < uv.Length; i++)
        {
            uv[i] = new Vector2(vertices[i].x, vertices[i].z);
        }
        MeshFilter mf = obj.AddComponent<MeshFilter>();
        Mesh mesh = new Mesh();
        mesh.vertices = vertices;
        mesh.triangles = triangles;
        mesh.uv = uv;
        mesh.RecalculateNormals();
        mesh.RecalculateBounds();
        obj.AddComponent<MeshRenderer>().material = material;
        mf.sharedMesh = mesh;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity是一款强大的游戏引擎,拥有丰富的绘图功能。要绘制一个多边形三角网,我们可以通过以下步骤来实现。 首先,在Unity的场景中创建一个空物体作为基准对象,用来放置绘制多边形。然后,我们需要定义多边形的顶点坐标。可以使用Vector3类型的数组来表示顶点坐标。 接下来,我们需要使用UnityMesh组件来创建三角网格。可以通过Mesh的vertices属性来设置顶点坐标。然后,通过添加三角形的顶点索引来定义每个三角形的形状。可以使用Mesh的triangles属性来设置三角形的顶点索引。 为了正确绘制多边形三角网,我们还需要设置Mesh的uv属性和normals属性。uv属性用于设置纹理坐标,而normals属性用于设置顶点的线方向。 最后,将创建的Mesh添加到基准物体上的MeshFilter组件中,并将基准物体添加到场景中。 完成上述步骤后,我们就成功绘制了一个多边形三角网。可以通过调整顶点坐标和三角形的顶点索引,来实现不同形状的多边形。 需要注意的是,Unity绘制多边形三角网是以三角形为基本单元的,因此无论输入的多边形是几边形,最终都会被分解成由三角形组成的形状来绘制。 总结起来,通过在Unity中创建空物体,定义顶点坐标,设置三角形的顶点索引,设置纹理坐标和线方向,以及将Mesh添加到基准物体上的MeshFilter组件中,就可以实现绘制多边形三角网。 ### 回答2: Unity 是一款流行的游戏引擎,它具有强大的绘图功能,可以用来绘制多边形三角网。 在 Unity 中,我们可以使用 Mesh 类来创建和绘制多边形三角网。首先,我们需要创建一个 Mesh 对象,然后设置它的顶点坐标和三角面的顶点索引。 例如,我们可以创建一个正方形的三角网。首先,我们定义该正方形的顶点坐标,一般按照顺时针或逆时针的顺序定义。然后,我们设置三角面的顶点索引,这里每三个顶点定义一个三角面。最后,我们将顶点坐标和三角面的顶点索引赋值给 Mesh 对象,并将其设置为游戏对象的 MeshFilter 组件的 mesh 属性。 在运行时,Unity 会根据这些定义好的顶点和三角面来绘制三角网。我们可以给三角网添加材质,调整颜色和纹理等属性,使其更加生动和丰富。 除了手动创建和设置顶点和三角面,Unity 还提供了一些简化的方绘制常见的形状,如正方形、圆形等。我们可以使用这些方来快速创建并绘制多边形三角网。 总之,Unity 作为一款强大的游戏引擎,可以通过 Mesh 类来绘制多边形三角网。我们可以手动定义顶点坐标和三角面的顶点索引,也可以使用 Unity 提供的简化方来创建和绘制多边形三角网。这样,我们就可以在游戏中实现各种各样的多边形形状,并赋予它们丰富的材质和纹理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值