Advertisement

Unity中创建自己的mesh以及动态修改mesh

阅读量:

开头

复制代码
    最近发现有很多人不知道在unity中可以创建和修改mesh,以为mesh只能从3dmax等软件中导入,所以这篇就相当于科普了。

正文

复制代码
    首先介绍如何创建mesh。
这里写图片描述

先创建一个空物体,名为test。

然后为这个物体增加 meshrender 和 meshfilter 两个组件

复制代码
    下面就要写将要赋给它的脚本了,先贴上代码,解释在下面。
复制代码
    using UnityEngine;
    using System.Collections;
    
    public class Test: MonoBehaviour
    {
    
    void Start()
    {
        Vector3[] newVertices = { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0) };
        Vector2[] newUV = { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) };
        int[] newTriangles = {0,2,1,0,3,2};
    
        Mesh mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;
    
        mesh.vertices = newVertices;
        mesh.uv = newUV;
        mesh.triangles = newTriangles;
    
    
    }
    }

要创建一个 mesh 必须要准备好三个必要的数组包括顶点数组三角形数组和 uv 数组。

  • 该顶点集合包含了该网格的所有顶点。
    例如:newVertices = new Vector3[] { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0) }。
    其中包含了四个顶点。
  • 其中一个包含两个这样的多边形实例。
    定义了一个包含两个这样的多边形实例。
  • uv数组 是一个vector2数组。
    它用于确定每个网格单元在二维空间中的位置参数。
    这将在下面演示给大家看。

代码写好之后,把脚本贴到Test物体上,然后设置一个material,如下图:

这里写图片描述

下面是运行后的图片:

这里写图片描述

关于为什么UV数组是这样的?你可以将其理解为其四个角落点的UV坐标分别为(0, 0)、(1, 0)、(1, 1)以及另一个点可能有误的设置(此处应为(-1, 1)或者其他值)。如果您希望修改代码中的UV分布情况,则可以将现有代码中的UV数组重新定义为Vector2[] newUV = { new Vector2( -1f, -1f ), new Vector2( -1f, 1f ), ... };这样一来代码修改后的情况将呈现如下形式:

这里写图片描述

需要注意的一点是,在该顶点数组中所有的顶点坐标均基于模型坐标系确定,在该系统初始生成的Test空对象中设置了相应的原点位置

仅仅是初步构建了二维网格模型。至于如何构建三维网格模型以及进行网格修改等操作,请期待后续详细的讲解与指导吧!

最后

复制代码
    就这样了  如果有错误或疑问,请评论,如果觉得还不错或有帮助,请关注或顶一下,谢谢啦~~~ (´・ω・`)

全部评论 (0)

还没有任何评论哟~