Unity3d Mesh篇(一)— 创建简单三角面


前言

Mesh(网格)是一种常用的3D图形表示方法,它由顶点,法线,UV 坐标,和三角形等组成。您可以使用 Mesh 类的方法来创建或修改网格,也可以使用 MeshFilter 组件或 MeshRenderer 组件来显示网格。UnityMesh 可以用于制作各种 3D 场景和效果,例如地形,水面,粒子,布料等。


一、Mesh组成

顶点(vertex):顶点是物体表面上的点,用 Vector3 类型表示它们在局部空间中的位置。
法线(normal):法线是顶点的方向,用 Vector3 类型表示它们在局部空间中的单位向量。
UV 坐标(uv):UV 坐标是顶点的纹理坐标,用 Vector2 类型表示它们在纹理图像中的位置。
三角形(triangle):三角形是物体表面上的面,用整数数组表示它们由哪些顶点组成。每个三角形由三个顶点索引构成,顶点索引是顶点数组中的位置。

二、使用步骤

首先,我们需要在 Unity 中创建一个空的 3D 项目。然后,我们需要在场景中添加一个空的游戏对象,我们可以把它命名为 “Triangle” ,这将是我们的网格生成器。为了让我们的网格能够显示在屏幕上,我们还需要给它添加一些组件,分别是:

MeshFilter:这个组件允许我们上传和存储我们的网格数据,以供 Unity 的图形 API 渲染。
MeshRenderer:这个组件负责渲染我们的网格,我们给它指定一个材质来改变网格的颜色和外观。
C# 脚本:这个组件是我们编写网格生成逻辑的地方,我们把它命名为 “Test”

下图是我们的游戏对象在inspector面板中的样子:
在这里插入图片描述

首先,我们需要在游戏对象上添加MeshFilter组件和MeshRenderer组件。这可以通过RequireComponent属性来实现,它会在挂载脚本的时候,自动添加指定的组件。

//挂载脚本的时候,自动添加下面的组件
[RequireComponent(typeof(MeshFilter)),RequireComponent(typeof(MeshRenderer))]

然后,我们需要在Start方法中创建一个Mesh对象,并获取MeshFilter组件的引用。我们可以使用new关键字来实例化一个Mesh对象,并赋值给一个变量。我们还可以给mesh一个名字,方便在编辑器中识别。我们可以使用GetComponent方法来获取MeshFilter组件的引用,并将mesh赋值给它的mesh属性。

void Start()
{
   
    //创建一个Mesh对象
    Mesh mesh = new Mesh();
    //获取MeshFilter组件的引用
    var meshFilter = GetComponent<MeshFilter>();
    //将mesh赋值给MeshFilter组件的mesh属性
    meshFilter.mesh = mesh;
    //给mesh一个名字
    mesh.name = "Mesh01";
}

接下来,我们需要设置mesh的顶点和三角形。顶点是一个Vector3数组,表示三维空间中的点的坐标。三角形是一个int数组,表示顶点数组中的索引,每三个索引构成一个三角形。我们可以使用mesh的vertices属性和triangles属性来设置这些信息。

private Vector3[] GetVertexs()
{
   
    //返回一个包含三个顶点的数组
    return new[]
    {
   
        new Vector3(0, 0, 0), //第一个顶点,索引为0
        new Vector3(1, 0, 0), //第二个顶点,索引为1
        new Vector3(1, 1, 0), //第三个顶点,索引为2
    };
}

private int[] GetTriangles()
{
   
    //返回一个包含三个索引的数组
    return new[]
    {
   
        0,1,2 //构成一个三角形的索引
    };
}

void Start()
{
   
    //设置mesh的顶点
    mesh.vertices = GetVertexs();
    //设置mesh的三角形
    mesh.triangles = GetTriangles();
}

这样,我们就完成了一个三角面的mesh的创建。我们可以在场景中添加一个空的游戏对象,并将Test脚本挂载到上面。然后,我们可以在Game视图中看到一个紫色的三角形,这就是我们创建的mesh。

如果我们想要给mesh添加一些颜色,我们还需要设置mesh的材质(material)。材质是一个Material对象,它定义了mesh的外观,如颜色、光照、纹理等。我们可以使用MeshRenderer组件的material属性来设置这些信息。

void Start()
{
   
    //获取MeshRenderer组件的引用
    var meshRenderer = GetComponent<MeshRenderer>();
    //创建一个Material对象
    Material material = new Material(Shader.Find("Standard"));
    //设置材质的颜色为红色
    material.color = Color.red;
    //将材质赋值给MeshRenderer组件的material属性
    meshRenderer.material = material;
}


这样,我们就给mesh添加了一些颜色。我们可以在Game视图中看到一个红色的三角形,这就是我们创建的mesh。

三、效果

在这里插入图片描述

四、总结

你已经学会了如何在 Unity 中简单地创建一个三角面。这是一个很基础的教程,但是它涉及了一些重要的概念,比如网格,顶点,三角形,索引,坐标等。你可以尝试修改你的代码,创建不同的形状,比如四边形,五边形,甚至更复杂的多边形。你也可以给你的网格添加一些颜色,纹理,光照等效果,让它更加美观

相关推荐

  1. Unity3D Delaunay德罗内三角算法详解

    2024-02-19 19:28:01       32 阅读
  2. 创建Dataloader基础

    2024-02-19 19:28:01       67 阅读
  3. Unity创建简单的Http服务器/客户端测试

    2024-02-19 19:28:01       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-19 19:28:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-19 19:28:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-19 19:28:01       82 阅读
  4. Python语言-面向对象

    2024-02-19 19:28:01       91 阅读

热门阅读

  1. 面试题-02

    2024-02-19 19:28:01       45 阅读
  2. 浅析SpringBoot中的事务管理

    2024-02-19 19:28:01       58 阅读
  3. 力扣爆刷第74天--动态规划01背包

    2024-02-19 19:28:01       53 阅读
  4. 洛谷P5365 [SNOI2017] 英雄联盟

    2024-02-19 19:28:01       61 阅读
  5. 平台组成-内容管理

    2024-02-19 19:28:01       46 阅读
  6. 鸿蒙应用/元服务开发-窗口概述

    2024-02-19 19:28:01       54 阅读
  7. 链表 -02

    2024-02-19 19:28:01       56 阅读
  8. logback实践

    2024-02-19 19:28:01       41 阅读
  9. 小程序API能力汇总——基础容器API(一)

    2024-02-19 19:28:01       45 阅读