您的位置:首页 > 移动开发 > Unity3D

Unity通过脚本创建Mesh(网格)

2022-04-08 14:05 1521 查看

##1.创建一个带Mesh的物体 Unity中的网格作为组件不能脱离物体单独存在 新建脚本

CreateMesh

public class CreateMesh: MonoBehaviour
{
void Start()
{
//该方法会新建一个名为Mesh的GameObject,该物体上包含一个 MeshFilter 和一个 MeshRenderer
GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
gameObject.transform.localScale = new Vector3(30, 30, 1);//放大一点,避免到时候看不见
}
}

然后将脚本搭载到场景中任意物体上 点击运行后场景出现名为Mesh的物体,包含

MeshFilter
MeshRenderer
,也可自行添加组件

这里Mesh Filter中的Mesh为None 因为我们还没有创建Mesh ##2.通过脚本创建Mesh Unity中Mesh由顶点、三角面和UV坐标组成 如果我们创建一个正方形,需要先声明相应数组 修改

Create Mesh

//public class CreateMesh: MonoBehaviour
//{
// void Start()
//{
Vector3[] vertices = new Vector3[0];	//声明顶点数组
Vector2[] uv = new Vector2[0];		    //声明uv向量
int[] triangles = new int[0];		    //声明三角形数组

Mesh mesh = new Mesh();				   //声明网格

//对网格进行赋值引用
mesh.vertices = vertices;
mesh.uv = uv;
mesh.triangles = triangles;

//GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
//gameObject.transform.localScale = new Vector3(30, 30, 1);

//将新建物体的 MeshFilter 设为新建的 网格(Mesh)
gameObject.GetComponent<MeshFilter>().mesh = mesh;
//}
//}

这时运行后Mesh Filter 中 Mesh 不再是null,而是我们刚刚声明的 网格,只是这个网格还没有相应的数据

继续修改

CreateMesh

//public class GameHandler5 : MonoBehaviour
//{
//这里声明了一个材质,给它赋值一个带贴图的材质,不用材质也行
public Material material;

//void Start()
//{
//这里我们创建一个正方形网格,所以需要4个顶点、4个UV点和6条边
Vector3[] vertices = new Vector3[4];
Vector2[] uv = new Vector2[4];
int[] triangles = new int[6];

//声明顶点的位置
vertices[0] = new Vector3(0, 1);
vertices[1] = new Vector3(1, 1);
vertices[2] = new Vector3(0, 0);
vertices[3] = new Vector3(1, 0);

//声明UV的位置
uv[0] = new Vector2(0, 1);
uv[1] = new Vector2(1, 1);
uv[2] = new Vector2(0, 0);
uv[3] = new Vector2(1, 0);

//声明三角边,这里三角边是根据上面的顶点来进行连接的,每三个顶点构成一个三角边
//这里后面的int类型参数对应 vertices[]数组中的顶点
triangles[0] = 0;
triangles[1] = 1;
triangles[2] = 2;

triangles[3] = 2;
triangles[4] = 1;
triangles[5] = 3;

//Mesh mesh = new Mesh();

//将设置好的参数进行赋值
mesh.vertices = vertices;
mesh.uv = uv;
mesh.triangles = triangles;

//GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
//gameObject.transform.localScale = new Vector3(30, 30, 1);

//gameObject.GetComponent<MeshFilter>().mesh = mesh;
gameObject.GetComponent<MeshRenderer>().material = material;
}
}

这个正方形存在 4个顶点、分为两个三角形共 6 条边、和 4 顶点 UV 运行结果 图片很暗是因为场景中没有光照

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: