以下是绘制正方形面片的一个例子,方便之后查阅:

效果如图所示:

红轴为x方向,蓝轴为z方向。

代码如下:

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SingleMesh:MonoBehaviour
{
public int size = ;//边长
public int segment = ;//分段数
public Material mat;//mesh材质
private Vector3[] vertices;//顶点
private Vector2[] uv;//纹理坐标
private int[] triangles;//索引 [ContextMenu("Create Mesh")]
/// <summary>
/// 创建mesh
/// </summary>
private void CreateMesh()
{
GameObject obj_cell = new GameObject();
obj_cell.name = "cell";
Mesh mesh = new Mesh();
mesh.Clear();
SetVertivesUV();//生成顶点和uv信息
SetTriangles();//生成索引
mesh.vertices = vertices;
mesh.uv = uv;
mesh.triangles = triangles; mesh.RecalculateNormals();//重置法线 mesh.RecalculateBounds(); //重置范围
obj_cell.AddComponent<MeshFilter>().mesh = mesh;
obj_cell.AddComponent<MeshRenderer>();
obj_cell.GetComponent<MeshRenderer>().material = mat;
} /// <summary>
/// 设置顶点信息
/// </summary>
private void SetVertivesUV()
{
vertices = new Vector3[(segment + ) * (segment + )];
uv = new Vector2[vertices.Length];
int num = ;
float m = (float)size / (float)segment;
for (int i = ; i < segment + ; i++)
for (int j = ; j < segment + ; j++)
{
vertices[num] = new Vector3(j * m,, i * m);
uv[num] = new Vector2((float)j / segment, (float)i / segment);
num++;
} }
/// <summary>
/// 设置索引
/// </summary>
private void SetTriangles()
{
triangles = new int[segment * segment * ];
int index = ;//用来给三角形索引计数
for (int i = ; i < segment; i++)
for (int j = ; j < segment; j++)
{
int line = segment + ;
int self = j + (i * line); triangles[index] = self;
triangles[index + ] = self + line + ;
triangles[index + ] = self + ;
triangles[index + ] = self;
triangles[index + ] = self + line;
triangles[index + ] = self + line + ; index += ;
}
}
}

其中triangles索引为链接各定点的顺序,一个小格的链接顺序如下:

准则:三角形有两面,正面可见,背面不可见。三角形的渲染顺序与三角形的正面法线呈左手螺旋定则。大部分按顺时针:012,213

unity中动态生成网格的更多相关文章

  1. Unity中动态创建Mesh

    什么是Mesh? Mesh是指的模型的网格,3D模型是由多边形拼接而成,而多边形实际上又是由多个三角形拼接而成的.即一个3D模型的表面其实是由多个彼此相连的三角面构成.三维空间中,构成这些三角形的点和 ...

  2. 在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定

    最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<A ...

  3. EasyUI中动态生成标签页

    这是最近学到的内容,当时是有思路但是不知道怎么获取当前的点击对象,就没有实现功能,通过更深入的学习,我知道了不仅仅是Java,Oracle中有一个this,同样的EasyUI中也存在一个this,来获 ...

  4. JQuery中动态生成元素的绑定事件(坑死宝宝了)

    今天在做项目的时候,遇到了一个前端的问题,坑了我好长时间没有解决,今天就记录于此,也分享给大家. 问题是这样的,首先看看我的界面,有一个初始印象: 下面是操作列所对应的JS代码: { "da ...

  5. HTML中动态生成内容的事件绑定问题【转载】

    转自 http://www.hitoy.org/event-binding-problem-of-dynamically-generated-content.html 由于实际的需要,有时需要往网页中 ...

  6. Unity 中动态修改碰撞框(位置,大小,方向)

    在Unity中,玩家处于不同的状态,要求的碰撞框的 位置/大小/方向 会有所改变,怎么动态的修改碰撞框呢? 下面是Capsure Collider(胶囊体)的修改: CapsuleCollider.d ...

  7. JavaScript中动态生成表格

    动态生成表格,首先需要输入并获取动态的数字,html中结构代码如下:行:<input type="text" id="row" value="5 ...

  8. Jquery中动态生成的元素没有点击事件或者只有一次点击事件

    今天用jq做动态生成的元素的click事件时,click只执行了一次,当然有些朋友可能根本没执行, 执行了一次的原因是因为可能有函数加载了一遍,一次都没执行的可能是没绑定对象或者jq版本问题, 动态生 ...

  9. Unity中 动态加载 Resources.Load()和Asset Bundle 的区别

    版权声明:本文为博主原创文章,未经博主允许不得转载. 初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去.我们在编辑器里看到的Ass ...

随机推荐

  1. Tomcat服务器多域名配置(转载)

    Tomcat服务器多域名配置 我们来讲解下如何在Tomcat服务器上进行多域名配置: 也就是一个Tomcat跑多网站,这里用真实案例举例,比如我这个云主机需要运行两个网站: pan.java1234. ...

  2. numpy中结构数组

    在c语言中,我们可以使用关键字struct定义结构类型.和c语言一样,numpy也可以创建结构定义,这样可以很方便的读取二进制的C语言结构数组,将其转换为numpy数组对象,假设我们定义的结构数组如下 ...

  3. html 打印代码,支持翻页

    ylbtech_html_print html打印代码,支持翻页 <html> <head> <meta name=vs_targetSchema content=&qu ...

  4. 介绍下Shell中的${}、##和%%使用范例

    假设定义了一个变量为:代码如下:file=/dir1/dir2/dir3/my.file.txt可以用${ }分别替换得到不同的值:${file#*/}:删掉第一个 / 及其左边的字符串:dir1/d ...

  5. EF使用延迟加载的本质原因

    EF(Entity Framework)是微软的一个ORM框架 使用过EF的同学都知道它有一个延迟加载的功能 那么这个延迟加载的功能到底是什么? 为什么需要延迟加载? 使用延迟加载的优点和缺点又各是什 ...

  6. WEB接口测试之Jmeter接口测试自动化 (三)(数据驱动测试) 接口测试与数据驱动

    转载:http://www.cnblogs.com/chengtch/p/6576117.html 1简介 数据驱动测试,即是分离测试逻辑与测试数据,通过如excel表格的形式来保存测试数据,用测试脚 ...

  7. Warning: isMounted(...) is deprecated in plain JavaScript React classes.

    1.错误提示 警告:isMounted(…)在纯 react.js 类中被弃用. 2.原因解析 出现此错误提示的原因是源代码内有已被React舍弃的代码,但此并不影响程序运行. 在index.js 内 ...

  8. 使用Gulp定制前端开发环境

    1.安装package.json中依赖了的组件 npm install 2.来到本地路径,创建工程配置文件 npm init 3.本地安装gulp npm install gulp --save-de ...

  9. JavaScript AJAX原生写法

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  10. Spring获取HttpServletRequest

    ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()