Unity3D动态生成多边形
来自https://blog.csdn.net/qq_14903317/article/details/69668521
自由绘制多边形 https://blog.csdn.net/lei_7103/article/details/54022496
首先在Unity中创建一个物体,并为它添加我们渲染网格需要的组件.
MeshFilter组件用于获取网格信息,我们生成的网格就需要添加到MeshFilter.MeshRenderer用于渲染网格,在这里使用默认的材质来演示.
要生成一个多边形,我们应该要有多边形的顶点数组.现在开始定义我们的变量
//顶点数组
public Vector3[] Vertexes;
//网格过滤器
private MeshFilter _meshFilter;
//网格
private Mesh _mesh;
接下来我们根据顶点动态生成一个网格.网格都是由三角形组成的,所以我们应该根据顶点数量求出三角形数量,
然后需要确定每个三角形的顶点在我们的顶点数组中的索引.下面上代码
public void Refresh()
{
//得到三角形的数量
int trianglesCount = Vertexes.Length - 2;
//三角形顶点ID数组
int[] triangles = new int[trianglesCount * 3];
//绘制三角形
_mesh.vertices = Vertexes;
//三角形顶点索引,确保按照顺时针方向设置三角形顶点
for (int i = 0; i < trianglesCount; i++)
{
for (int j = 0; j < 3; ++j)
{
triangles[i * 3 + j] = j == 0 ? 0 : i + j;
}
}
_mesh.triangles = triangles;
_meshFilter.mesh = _mesh;
}
虽然只有短短几行代码,**但是值得注意的是我们生成三角形的顶点顺序必须为顺时针方向**.所以在传入顶点的时候我们应该按照顺时针方向传入顶点.
Vertexes = new Vector3[] { Vector3.zero, new Vector3(-1, 1, 0), new Vector3(1, 2, 0), new Vector3(2, -1, 0) };
现在生成的四边形如下:
生成的绿色三角形使我们的第一个三角形,顶点顺序为0, 1, 2(顺时针方向), 黄色三角形顶点顺序为0,2,3(顺时针方向),每个三角形的顶点顺序都是为顺时针方向,这样我们看到的面才是正方向的.如果我们的顶点为逆时针顺序,那么我们看到的面为反方向的.如下:
我们就需要把视角调整到背面才能看到四边形,在正面是看不见的.注意观察坐标轴.
Unity3D动态生成多边形的更多相关文章
- Unity3D独立游戏开发日记(一):动态生成树木
目前写的独立游戏是一个沙盒类型的游戏.游戏DEMO视频如下: 提到沙盒类型的游戏,就有人给出了这样的定义: 游戏世界离现实世界越近,自由度.随机度越高才叫沙盒游戏.所谓自由度,就是你在游戏里想干啥就干 ...
- Unity3D动态加载外部资源
最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别.Resources ...
- Unity3d 动态加载场景物件与缓存池的使用
聊聊Unity3d动态加载场景物件那些事儿. 众所周知,在策划或美术设计完游戏场景地图后,一个场景中可能会存在成千上万个小的物件,比如石头,木箱子,油桶,栅栏等等等等,这些物件并不是游戏中的道具,仅仅 ...
- 动态生成navmeshi-进击的新版NavMesh系统:看我飞檐走壁
http://forum.china.unity3d.com/thread-25421-1-1.html0x00 前言 unity5.6作为Unity5最后的一个版本,的确起到了一个承上启下的作用.除 ...
- Aop动态生成代理类时支持带参数构造函数
一.背景 在某些情况下,我们需要植入AOP代码的类并没有默认构造函数.那么此时动态生成的代理类也需要相同签名的构造函数,并且内部调用原始类的构造函数.自己折腾了1晚上没搞定,现在搞定了发出来供大家一起 ...
- dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来
dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...
- ABP(现代ASP.NET样板开发框架)系列之20、ABP展现层——动态生成WebApi
点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之20.ABP展现层——动态生成WebApi ABP是“ASP.NET Boilerplate Project (ASP.N ...
- 【.NET深呼吸】Zip文件操作(2):动态生成Zip文档
通过前面一篇烂文的介绍,大伙儿知道,ZipArchive类表示一个zip文档实例,除了用上一篇文章中所列的方法来读写zip文件外,还可以直接通过ZipArchive类,动态生成zip文件. 文件流操作 ...
- jquery动态生成的元素添加事件的方法
动态生成的元素如果要添加事件,要写成 $(document).on("click", "#txtName", function() { alert(this.v ...
随机推荐
- C语言复习---输出魔方阵
一:奇魔方阵 算法: 1.第一个元素放在第一行中间一列 .下一个元素存放在当前元素的上一行.下一列. .如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下 ...
- Kafka技术内幕 读书笔记之(六) 存储层——服务端处理读写请求、分区与副本
如下图中分区到 日 志的虚线表示 : 业务逻辑层的一个分区对应物理存储层的一个日志 . 消息集到数据文件的虚线表示 : 客户端发送的消息集最终会写入日志分段对应的数据文件,存储到Kafka的消息代理节 ...
- Eclipse 中报错的阅读顺序
1 九月 19, 2018 8:49:53 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefin ...
- Uncaught DOMException: Failed to construct 'WebSocket': The URL '/qibao/websocket/service1000' is invalid.
出现这个问题是构造 WebSocket失败了. js代码改成 //实现化WebSocket对象,指定要连接的服务器地址与端口 建立连接//等同于socket = new WebSocket(path+ ...
- 【四】Java虚拟机内存区域初识
一.线程独占区 1.程序计数器 程序计数器是一块处于线程独占区较小的内存空间,它可以看是当前线程所执行的字节码的行号指示器. 如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码 ...
- springboot项目怎么部署到外部tomcat
spring-boot项目中,默认提供内嵌的tomcat,所以打包直接生成jar包,用Java -jar命令就可以启动. 但是也有一定的需求,会使用外部tomcat来部署项目.下面来看: 1.新建项目 ...
- 关于jQuery——attr方法和prop方法获取input的checked属性操作
经常使用jQuery插件的attr方法获取checked属性值,获取的值的大小为未定义,此时可以用prop方法获取其真实值,下面介绍这两种方法的区别: 1.通过prop方法获取checked属性,获取 ...
- 如何用vue控制样式实现相同的结构样式
<div class="index-board-list"> <div class="index-board-item" v-for=&quo ...
- 获取对象的key值,并保存在数组中
const itm = { a:1, b:2, c:3 } //Object.keys获取对象的属性,再遍历 Object.keys(itm).forEach(function(key,i,v){ c ...
- es6解构赋值的高级技巧
1. 解构嵌套的对象,注意,这时p是模式,不是变量,因此不会被赋值.如果p也要作为变量赋值,可以写成下面这样. let obj = { p: [ 'Hello', { y: 'World' } ] } ...