如何实现unity 绘制三角面,一通好找终于被我找到。其实并不是很难,只是我们可能不是很了解这方面知识,所以做起来比较困难。现在我们就来看unity绘制三角面。
因为3D世界中游戏面全都是用三角形来拼起来的(出于效率的考虑),所以大家所看到的面其实都是用三角面拼接起来的。那么下面我们看看在Unity3D 中如何绘制三角形平面。先创建一个GameObject对象,我命名为face,然后给这个对象添加两个Mesh属性, 添加MeshFilter(网格过滤器)与mesh Renderer(网格渲染器)属性,这样子就可以绘制网格面了。- using UnityEngine;
- using System.Collections;
- public class Main : MonoBehaviour
- {
- // Update is called once per frame
- void Update ()
- {
- //通过object对象名 face 得到网格渲染器对象
- MeshFilter meshFilter = (MeshFilter)GameObject.Find("face").GetComponent(typeof(MeshFilter));
- //通过渲染器对象得到网格对象
- Mesh mesh = meshFilter.mesh;
- //API中写的不是提清楚,我详细的在说一遍
- //设置顶点,这个属性非常重要
- //三个点确定一个面,所以Vector3数组的数量一定是3个倍数
- //遵循顺时针三点确定一面
- //这里的数量为6 也就是我创建了2个三角面
- //依次填写3D坐标点
- mesh.vertices = new Vector3[] {new Vector3(5, 0, 0), new Vector3(0, 5, 0), new Vector3(0, 0, 5),new Vector3(-5, 0, 0), new Vector3(0, -5, 0), new Vector3(0, 0, -5)};
- //设置贴图点,因为面确定出来以后就是就是2D
- //所以贴纸贴图数量为Vector2
- //第一个三角形设置5个贴图
- //第二个三角形设置一个贴图
- //数值数量依然要和顶点的数量一样
- mesh.uv = new Vector2[] {new Vector2(0, 0), new Vector2(0, 5), new Vector2(5, 5),new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1)};
- //设置三角形索引,这个索引是根据上面顶点坐标数组的索引
- //对应着定点数组Vector3中的每一项
- //最后将两个三角形绘制在平面中
- //数值数量依然要和顶点的数量一样
- mesh.triangles= new int []{0,1,2,3,4,5};
- }
- }