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

文章目录

  • 前言
  • 一、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), //第一个顶点,索引为0new Vector3(1, 0, 0), //第二个顶点,索引为1new 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 中简单地创建一个三角面。这是一个很基础的教程,但是它涉及了一些重要的概念,比如网格,顶点,三角形,索引,坐标等。你可以尝试修改你的代码,创建不同的形状,比如四边形,五边形,甚至更复杂的多边形。你也可以给你的网格添加一些颜色,纹理,光照等效果,让它更加美观

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479206.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

threejs 3D标注

import { CSS3DObject } from "three/examples/jsm/renderers/CSS3DRenderer";gltfLoader.load("./model/exhibit2.glb", (gltf) >{let array ["雕像", "中药房", "浸制区", "道地沙盘","动物标本区&quo…

Java——Stream流的学习

在开发过程中&#xff0c;经常或忽略流的使用&#xff0c;导致用的不熟练&#xff0c;于是抽时间系统的学习下stream的使用&#xff0c;找了哔哩哔哩的教程跟着看看练练。 准备工作 创建Book、Aurhor实体类&#xff0c;初始化数据 public static List<Author> getAuth…

【Linux | C++ 】基于环形队列的多生产者多消费者模型(Linux系统下C++ 代码模拟实现)

阅读导航 引言一、生产者消费者模型二、环形队列简介三、基于环形队列的生产者消费者模型&#xff08;C 代码模拟实现&#xff09;⭕Makefile文件⭕ . h 头文件✅sem.hpp✅ringQueue.hpp ⭕ . cpp 文件✅testMain.cpp 温馨提示 引言 在上一篇文章中&#xff0c;我们深入探讨了…

如何在CentOS安装SQL Server数据库并实现无公网ip环境远程连接

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具&#xff0…

异常统一处理:HttpRequestMethodNotSupportedException(Http请求方法不支持异常)

一、引言 本篇内容是“异常统一处理”系列文章的重要组成部分&#xff0c;主要聚焦于对 HttpRequestMethodNotSupportedException 的原理解析与异常处理机制&#xff0c;并给出测试案例。 关于 全局异常统一处理 的原理和完整实现逻辑&#xff0c;请参考文章&#xff1a; 《Sp…

STM32 USART详细解读(理论知识)

文章目录 前言一、同步传输和异步传输二、UART协议三、UART硬件结构1.波特率&#xff0c;数据位&#xff0c;校验位&#xff0c;停止位设置2.数据发送流程3.数据接收流程4.中断控制 总结 前言 本篇文章来给大家讲解一下STM32中的USART&#xff0c;USART是STM32中非常重要的一个…

Vscode vim 插件使用Ctrl+C和V进行复制粘贴到剪切板

Vscode vim 插件使用CtrlC和V进行复制粘贴到剪切板 使用这一个插件的时候复制粘贴和其他软件互动的时候体验不好, 并且不可以用Ctrl c, Ctrl v很不爽 "vim.commandLineModeKeyBindings": [{"before" : ["Ctrl", "c"],"after&q…

索引失效的10中场景

目录 前言 1. 准备工作 1.1 创建user表 1.2 插入数据 1.3 查看数据库版本 1.4 查看执行计划 2. 不满足最左匹配原则 2.1 哪些情况索引有效&#xff1f; 2.2 哪些情况索引失效&#xff1f; 3. 使用了select * 4. 索引列上有计算 5. 索引列用了函数 6. 字段类型不同 …

Vue25 过滤器

实例 dayjs.min.js需要去bootcdn下载 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>过滤器</title><script type"text/javascript" src"../js/vue.js"></script><script t…

第三讲 数据存储

面向磁盘的架构 DBMS 假定数据库的主要存储位置位于非易失性磁盘【non-volatile disk】上。 DBMS 的组件【components】负责管理非易失性【non-volatile】和易失性【volatile】存储之间的数据移动。 为了理解来回移动数据的影响&#xff0c;我们首先要先理解存储层次结构是什么…

C#分部类、分割类的用法,及用分割类设计一个计算器

目录 一、涉及到的知识点 1.分部类 2.分部类主要应用在以下两个方面 3.合理使用分部类分割类 4.事件处理程序 5.Math.Ceiling方法 6.Text.Contains() 7.pictureBox.Tag属性 二、实例 1.源码 2.生成效果 在开发一些大型项目或者特殊部署时&#xff0c;可能需要…

Appium Python自动化测试之环境搭建

Appium简介 Appium是一个自动化测试开源工具&#xff0c;支持IOS和Android平台上的移动原生应用、移动Web应用和混合应用。所谓的“移动原生应用”是指那些用IOS或者Android SDK写的应用&#xff1b;所谓的“移动Web应用”是指使用移动浏览器方位的应用&#xff08;Appium支持…