Unity通过脚本创建Mesh(网格)
1.创建一个带Mesh的物体
Unity中的网格作为组件不能脱离物体单独存在
新建脚本CreateMesh
public class CreateMesh: MonoBehaviour
{
void Start()
{
//该方法会新建一个名为Mesh的GameObject,该物体上包含一个 MeshFilter 和一个 MeshRenderer
GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
gameObject.transform.localScale = new Vector3(30, 30, 1);//放大一点,避免到时候看不见
}
}
然后将脚本搭载到场景中任意物体上
点击运行后场景出现名为Mesh的物体,包含MeshFilter和 MeshRenderer,也可自行添加组件


这里Mesh Filter中的Mesh为None
因为我们还没有创建Mesh
2.通过脚本创建Mesh
Unity中Mesh由顶点、三角面和UV坐标组成
如果我们创建一个正方形,需要先声明相应数组
修改Create Mesh
//public class CreateMesh: MonoBehaviour
//{
// void Start()
//{
Vector3[] vertices = new Vector3[0]; //声明顶点数组
Vector2[] uv = new Vector2[0]; //声明uv向量
int[] triangles = new int[0]; //声明三角形数组
Mesh mesh = new Mesh(); //声明网格
//对网格进行赋值引用
mesh.vertices = vertices;
mesh.uv = uv;
mesh.triangles = triangles;
//GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
//gameObject.transform.localScale = new Vector3(30, 30, 1);
//将新建物体的 MeshFilter 设为新建的 网格(Mesh)
gameObject.GetComponent<MeshFilter>().mesh = mesh;
//}
//}
这时运行后Mesh Filter 中 Mesh 不再是null,而是我们刚刚声明的 网格,只是这个网格还没有相应的数据

继续修改CreateMesh
//public class GameHandler5 : MonoBehaviour
//{
//这里声明了一个材质,给它赋值一个带贴图的材质,不用材质也行
public Material material;
//void Start()
//{
//这里我们创建一个正方形网格,所以需要4个顶点、4个UV点和6条边
Vector3[] vertices = new Vector3[4];
Vector2[] uv = new Vector2[4];
int[] triangles = new int[6];
//声明顶点的位置
vertices[0] = new Vector3(0, 1);
vertices[1] = new Vector3(1, 1);
vertices[2] = new Vector3(0, 0);
vertices[3] = new Vector3(1, 0);
//声明UV的位置
uv[0] = new Vector2(0, 1);
uv[1] = new Vector2(1, 1);
uv[2] = new Vector2(0, 0);
uv[3] = new Vector2(1, 0);
//声明三角边,这里三角边是根据上面的顶点来进行连接的,每三个顶点构成一个三角边
//这里后面的int类型参数对应 vertices[]数组中的顶点
triangles[0] = 0;
triangles[1] = 1;
triangles[2] = 2;
triangles[3] = 2;
triangles[4] = 1;
triangles[5] = 3;
//Mesh mesh = new Mesh();
//将设置好的参数进行赋值
mesh.vertices = vertices;
mesh.uv = uv;
mesh.triangles = triangles;
//GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
//gameObject.transform.localScale = new Vector3(30, 30, 1);
//gameObject.GetComponent<MeshFilter>().mesh = mesh;
gameObject.GetComponent<MeshRenderer>().material = material;
}
}
这个正方形存在 4个顶点、分为两个三角形共 6 条边、和 4 顶点 UV
运行结果


图片很暗是因为场景中没有光照
Unity通过脚本创建Mesh(网格)的更多相关文章
- unity, 用脚本创建mesh
创建一个空gameObject,添加Mesh Filter和Mesh Renderer两个component,再添加一个脚本createMeshScript: using UnityEngine;us ...
- Unity中动态创建Mesh
什么是Mesh? Mesh是指的模型的网格,3D模型是由多边形拼接而成,而多边形实际上又是由多个三角形拼接而成的.即一个3D模型的表面其实是由多个彼此相连的三角面构成.三维空间中,构成这些三角形的点和 ...
- 关于Unity中Mesh网格的详解
3D模型 通过3D建模软件所建出来的点和面,如以三角形为主的点和面,比如人的脑袋一个球,就是由各种各样的三角形组成的点和面. 点和面以及纹理坐标都是通过3D建模软件建模出来的. Unity会帮我们把模 ...
- Unity(2) 脚本简单操作
生命周期(按顺序排列) Awake():脚本唤醒,系统执行的第一个方法,在脚本声明周期内只执行一次,初始化一般可以在这里 Start():Awake之后,Update之前,只执行一次,一般在awake ...
- Unity Mono脚本 加密
加密环境 引擎版本:Unity3D 5.3.4 及更高版本 (使用Mono而并非IL2CPP) 操作系统:CentOS 6.2(Final) 加密环境:Android.IOS(暂定) 加密对象:C#源 ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 创建子网格
jQuery EasyUI 数据网格 - 创建子网格 使用数据网格(datagrid)的详细视图,用户可以展开一行来显示附加的详细信息. 任何内容都可以加载作为行详细,子网格也可以动态加载. 本教程将 ...
- 游戏编程之Unity常用脚本类的继承关系
前言学习Unity开发引擎的初学者会接触大量的脚本类,而这些类之间的关系往往容易被忽略.本文对Unity引擎开发中的一些常用类及其关系进行了简单的归纳总结. 博文首发地址:http://tieba.b ...
- threeJS创建mesh,创建平面,设置mesh的平移,旋转、缩放、自传、透明度、拉伸
这个小案例是当初我在学习的时候,小的一个小案例,代码还需要进一步优化:还请谅解~~:主要用到了threeJS创建mesh,创建平面,设置mesh的平移,旋转.缩放.自传.透明度.拉伸等这些小功能: 采 ...
- Unity基础-脚本生命周期
理解Unity脚本的生命周期对游戏开发很重要,这篇文章对生命周期做一个记录和总结.Unity的脚本生命周期(消息),也就是在脚本运行时,自动并且按顺序执行的一系列函数.在unity官网中有对生命周期详 ...
随机推荐
- ArcMap操作随记(15)
1.字段顺序的调整 [图层属性]→[字段]([高级排序]功能也在这里) 2.所谓热点地区: 本身是高值,邻居也是高值,才成为热点地区(这是操作中总结出的,但其实了解原理就很简单了,详细请查看空间自相关 ...
- hadoop学习笔记 一
Hadoop 2.x * common * HDFS 存储数据 NameNode 主从结构 * 存储文件系统的元数据,命名空间namespace DataNode * 存储数据 SecondaryNa ...
- 网关中间件-Nginx(二)
网关中间件-Nginx(一) 第一部分我们主要介绍如下几点: 1.nginx的基本概念 2.nginx结合业务场景实现负载均衡 3.常见问题的举例 这一部分主要介绍Nginx中限流,缓存,动静分离,以 ...
- SQL注入手册
英文版:链接: https://sqlwiki.netspi.com/ 中文版:链接: https://pan.baidu.com/s/1WWmjvYYnLC6_nItMVvUVig 密码: e98r ...
- [转载]详解ssh端口转发(二)
关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...
- ASP.NET Core 6框架揭秘实例演示[28]:自定义一个服务器
作为ASP.NET Core请求处理管道的"龙头"的服务器负责监听和接收请求并最终完成对请求的响应.它将原始的请求上下文描述为相应的特性(Feature),并以此将HttpCont ...
- 抖音网页版高清视频抓取教程selenium
废话不多说,直接上代码 from selenium import webdriver from selenium.webdriver import ChromeOptions import time ...
- Shell 脚本是什么?
一个 Shell 脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务.- ...
- 如何处理异形屏iphone X?
safe area: 默认放置在安全区域以避免遮挡, 但会压缩 在meta中添加viewport-fit=cover: 告诉浏览器要讲整个页面渲染到浏览器中,不管设备是圆角与否,这个时候会造成页面的元 ...
- SpringBoot 日志
springboot日志简介 SpringBoot使用的日志是sl4j + logback,sl4j是抽象层,不做具体的实现.实现主要是logback来做.SpringBoot同时也整合了其他框架的日 ...