unity中动态生成网格
以下是绘制正方形面片的一个例子,方便之后查阅:
效果如图所示:
红轴为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中动态生成网格的更多相关文章
- Unity中动态创建Mesh
什么是Mesh? Mesh是指的模型的网格,3D模型是由多边形拼接而成,而多边形实际上又是由多个三角形拼接而成的.即一个3D模型的表面其实是由多个彼此相连的三角面构成.三维空间中,构成这些三角形的点和 ...
- 在后台代码中动态生成pivot项并设置EventTrigger和Action的绑定
最近在做今日头条WP的过程中,遇到需要动态生成Pivot项的问题.第一个版本是把几个频道写死在xaml里了,事件绑定也写在xaml里,每个频道绑定一个ObservableCollection<A ...
- EasyUI中动态生成标签页
这是最近学到的内容,当时是有思路但是不知道怎么获取当前的点击对象,就没有实现功能,通过更深入的学习,我知道了不仅仅是Java,Oracle中有一个this,同样的EasyUI中也存在一个this,来获 ...
- JQuery中动态生成元素的绑定事件(坑死宝宝了)
今天在做项目的时候,遇到了一个前端的问题,坑了我好长时间没有解决,今天就记录于此,也分享给大家. 问题是这样的,首先看看我的界面,有一个初始印象: 下面是操作列所对应的JS代码: { "da ...
- HTML中动态生成内容的事件绑定问题【转载】
转自 http://www.hitoy.org/event-binding-problem-of-dynamically-generated-content.html 由于实际的需要,有时需要往网页中 ...
- Unity 中动态修改碰撞框(位置,大小,方向)
在Unity中,玩家处于不同的状态,要求的碰撞框的 位置/大小/方向 会有所改变,怎么动态的修改碰撞框呢? 下面是Capsure Collider(胶囊体)的修改: CapsuleCollider.d ...
- JavaScript中动态生成表格
动态生成表格,首先需要输入并获取动态的数字,html中结构代码如下:行:<input type="text" id="row" value="5 ...
- Jquery中动态生成的元素没有点击事件或者只有一次点击事件
今天用jq做动态生成的元素的click事件时,click只执行了一次,当然有些朋友可能根本没执行, 执行了一次的原因是因为可能有函数加载了一遍,一次都没执行的可能是没绑定对象或者jq版本问题, 动态生 ...
- Unity中 动态加载 Resources.Load()和Asset Bundle 的区别
版权声明:本文为博主原创文章,未经博主允许不得转载. 初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去.我们在编辑器里看到的Ass ...
随机推荐
- 小程序 wx:for 循环嵌套
json数据: [//library-6F [//library-6F-601 [//id:1-1 ,8(Y/N),9(Y/N)……21(Y/N) 'Y','Y','Y' ...
- ASIHTTPRequest框架使用总结系列之阿堂教程2(同步请求)
从本篇开始,阿堂结合一些具体代码来说明.在ASIHTTPRequest框架中,与http请求相关的类有ASIHTTPRequest 和 ASIFormDataRequest,其中最常用的是 ASIH ...
- 如何开启Linux双网卡的转发功能
原文地址:http://blog.csdn.net/lllzd/article/details/8587624 说明:在<把arm开发板做成USB网卡(RNDIS /Ethernet Gadge ...
- Android控件之GridView探究
GridView是一项显示二维的viewgroup,可滚动的网格.一般用来显示多张图片. 以下模拟九宫图的实现,当鼠标点击图片时会进行相应的跳转链接. 目录结构 main.xml布局文件,存放Grid ...
- 3、列表 list
列表 >>> list=['aaa','bbb','ccc'] >>> print list ['aaa', 'bbb', 'ccc'] >>> ...
- 粗谈CDN
CDN:内容分发网络(content delivery network) 1.DNS解析到最快(有可能是地理上最近,也有可能是地理上远但是链路最好)的CDN缓存设备 2.从CDN获取已经缓存的资源 3 ...
- Ubuntu中彻底修改用户名及密码
转自:http://blog.csdn.net/sailor201211/article/details/52305591 方案二:修改与用户和组相关的配置文件 这种方法更加本质,直接修改与用户和组相 ...
- 2017.6.30 用shiro实现并发登录人数控制(实际项目中的实现)
之前的学习总结:http://www.cnblogs.com/lyh421/p/6698871.html 1.kickout功能描述 如果将配置文件中的kickout设置为true,则在另处再次登录时 ...
- resin后台输出中文乱码的解决办法!
resin后台输出中文乱码的解决办法! 学习了:https://blog.csdn.net/kobeguang/article/details/34116429 编辑conf/resin.con文件: ...
- Intellij output 中文乱码
使用intellij有一段时间了,intellij output中文乱码,每次使用这两点解决,就可以解决乱码问题. 1.修改启动参数 修改安装Intellij目录下的C:\Program Files ...