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

效果如图所示:

红轴为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. XCode工程内多Targets教程

    作者  透明de面具 原帖地址  http://www.cocoachina.com/bbs/read.php?tid-10972-fpage-0-toread--page-1.html    相信很 ...

  2. 什么是ISP,他的工作原理是怎样的?

    ISP是Image Signal Processor的缩写,全称是影像处理器.在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始信号数据,可以理解为整个相机拍照.录像的第一步处理流程,对 ...

  3. XShell命令行使用

    1.建立连接: 2.查看总体目录: 3.查看对应服务目录: 4.删除对应jar包后,再查看目录下文件: 5.上传对应的jar文件: 6.重启服务 7.查看服务日志: 8.mv old-name new ...

  4. zabbix分组报警

    生产上需要在出现报警情况下,不同的主机发送报警给不同的用户 下面实例为分组为dev(开发组)和ops(运维组) 1.把主机进行分组 创建主机群组 配置-->主机群组-->创建主机群组,创建 ...

  5. 2017.4.10 spring-ldap官方文档学习

    官网:http://www.springframework.org/ldap 官方文档及例子(重要):http://docs.spring.io/spring-ldap/docs/2.1.0.RELE ...

  6. [PIC32--IDE]使用MPLAB IDE调试

    问题描写叙述 安装好MPLAB IDE后,就能够用来调试自己的PIC32板子,用于应用的开发了. 开发板 手边使用的是Microchip的PIC32 Ethernet Starter Kit II的小 ...

  7. 内核中bitmap的使用

    在编写应用层代码中使用位图,发现内核中已经有现成的实现便使用之.对位图的使用主要是几个 关键API. 第一:bitmap_zero函数用于初始化位图 源码如下: /* *@dst: 位图的起始地址 * ...

  8. JQuery修改对象的属性值

    JQuery修改对象的属性值 用到的便是JQuery提供的attr方法,获取属性值的基本结构为:$(obj).attr("属性名"):修改属性值的结构为:$(obj).attr(& ...

  9. Hbase 目录树

    转自 http://www.cnblogs.com/nexiyi/p/hbase_on_hdfs_directory.html 总所周知,HBase 是天生就是架设在 HDFS 上,在这个分布式文件系 ...

  10. Android开发过程中遇到的问题集合(—)

    1. Re-installation failed due to different application signatures. 将原来的软件包删除掉,然后又一次安装一次就好了.在命令行上执行:a ...