一、什么是Mesh网格
Mesh是模型的网格,通过点构成线,再由线构成三角形,最后由三角形构成面,然后通过材质来进行网格表面的表达,如阴影,贴图等。Unity除了ui的mesh,其他都需要MeshFilter来确定网格形状,通过Material以及MeshRenderer来进行网格渲染。
二 生成四边形Mesh代码

C#代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreatMesh : MonoBehaviour
{
void Start()
{
//添加网格过滤器
gameObject.AddComponent<MeshFilter>();
//添加网格渲染
gameObject.AddComponent<MeshRenderer>();
//添加网格碰撞器
gameObject.AddComponent<MeshCollider>();
//添加顶点坐标
List<Vector3> vectors = new List<Vector3>()
{
new Vector3(0,0,0),
new Vector3(0,0,10),
new Vector3(10,0,10),
new Vector3(10,0,0),
};
//按照顺时针的顺序添加绘制点
List<int> ints = new List<int>()
{
0,1,2,
0,2,3,
0,3,2,
0,2,1
};
Mesh mesh = new Mesh();
//将两个集合转换为数组
mesh.vertices = vectors.ToArray();
mesh.triangles = ints.ToArray();
GetComponent<MeshCollider>().sharedMesh = mesh;
GetComponent<MeshFilter>().mesh = mesh;
GetComponent<MeshRenderer>().material = Resources.Load<Material>("mat");
}
// Update is called once per frame
void Update()
{
}
}
三 利用Mesh网格生成圆

代买如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CreatMesh : MonoBehaviour
{
//把圆分成多少份
public int n = 36;
//圆的半径
public int r = 3;
void Start()
{
//每一份的弧度
float angel = 2 * Mathf.PI / n;
//存放uv左边的集合
List<Vector2> uv = new List<Vector2>();
//添加中心点
uv.Add(new Vector2(0.5f, 0.5f));
//存放顶点坐标的集合
List<Vector3> vectors = new List<Vector3>();
//存放绘制顺序的集合
List<int> ints = new List<int>();
//添加圆心
vectors.Add(Vector3.zero);
for (int i = 1; i < n + 1; i++)
{
//对边
float x = Mathf.Sin(i * angel) * r;
//邻边
float y = Mathf.Cos(i * angel) * r;
//计算uv坐标
float uvx = (x + r) / (2 * r);
float uvy = (y + r) / (2 * r);
//添加顶点
uv.Add(new Vector2(uvx, uvy));
//添加每份三角的顶点坐标
vectors.Add(new Vector3(x, 0, y));
ints.Add(0);
ints.Add(i);
//判断最后一份三角
if (i == n)
{
ints.Add(1);
}
else
{
ints.Add(i + 1);
}
}
Mesh mesh = new Mesh();
mesh.vertices = vectors.ToArray();
mesh.triangles = ints.ToArray();
mesh.uv = uv.ToArray();
GetComponent<MeshFilter>().mesh = mesh;
GetComponent<MeshCollider>().sharedMesh = mesh;
}
// Update is called once per frame
void Update()
{
}
}

6049

被折叠的 条评论
为什么被折叠?



