Unity-创建Mesh网格和导出Mesh网格

分类: 完美365体育官方网站 时间: 2025-10-21 08:27:01 作者: admin 阅读: 5855 点赞: 21
Unity-创建Mesh网格和导出Mesh网格

一.在Unity中创建Mesh网格的用处包括:

自定义3D模型:允许开发者创建独特的3D形状,超越Unity内置几何体的限制。

性能优化:通过合并多个网格,减少Draw Call,提高渲染效率,特别是在处理大量相似物体时。

细节丰富:支持更复杂的细节表现,如细分网格、法线贴图等,增强视觉效果。

动态生成内容:在运行时生成地形、建筑物等,增加游戏的变化性和可玩性。

物理交互:与物理引擎结合,创建复杂的碰撞体,增强物体之间的物理交互效果。

动画和变形:实现复杂的动画效果,如角色表情变化或物体形状变换。

环境构建:用于创建游戏环境中的各种元素,如地形、建筑、道具等,提升游戏的沉浸感。

(1)生成CubeMesh

Cube思路图:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class CubeMesh : MonoBehaviour

{

public MeshFilter meshFilter;

// Start is called before the first frame update

void Start()

{

//顶点助手 能够帮助咱们快速构建mesh网格

VertexHelper vh = new VertexHelper();

//Cube

//添加顶点

vh.AddVert(new Vector3(0, 0, 0), Color.white, new Vector2(0, 0));

vh.AddVert(new Vector3(0, 1, 0), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(1, 1, 0), Color.white, new Vector2(1, 1));

vh.AddVert(new Vector3(1, 0, 0), Color.white, new Vector2(1, 0));

vh.AddVert(new Vector3(1, 1, 1), Color.white, new Vector2(0, 0));

vh.AddVert(new Vector3(1, 0, 1), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(0, 1, 1), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(0, 0, 1), Color.white, new Vector2(1, 0));

vh.AddVert(new Vector3(1, 1, 0), Color.white, new Vector2(1, 1));

vh.AddVert(new Vector3(1, 0, 0), Color.white, new Vector2(1, 0));

vh.AddVert(new Vector3(0, 1, 1), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(0, 1, 0), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(1, 1, 1), Color.white, new Vector2(1, 1));

vh.AddVert(new Vector3(1, 0, 1), Color.white, new Vector2(1, 0));

vh.AddVert(new Vector3(0, 1, 1), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(0, 0, 1), Color.white, new Vector2(0, 0));

vh.AddVert(new Vector3(0, 1, 1), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(1, 1, 0), Color.white, new Vector2(1, 1));

vh.AddVert(new Vector3(1, 1, 1), Color.white, new Vector2(1, 1));

vh.AddVert(new Vector3(0, 1, 1), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(0, 1, 1), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(0, 0, 1), Color.white, new Vector2(0, 0));

vh.AddVert(new Vector3(0, 1, 0), Color.white, new Vector2(0, 1));

vh.AddVert(new Vector3(0, 0, 0), Color.white, new Vector2(0, 0));

vh.AddTriangle(0, 1, 2);

vh.AddTriangle(0, 2, 3);

vh.AddTriangle(3, 2, 4);

vh.AddTriangle(3, 4, 5);

vh.AddTriangle(5, 4, 6);

vh.AddTriangle(5, 6, 7);

vh.AddTriangle(7, 6, 1);

vh.AddTriangle(7, 1, 0);

vh.AddTriangle(1, 6, 2);

vh.AddTriangle(2, 6, 4);

vh.AddTriangle(3, 5, 7);

vh.AddTriangle(7, 0, 3);

//导出mesh网格

Mesh mesh = new Mesh();

vh.FillMesh(mesh);

//自动计算法线

mesh.RecalculateNormals();

meshFilter.mesh = mesh;

}

// Update is called once per frame

void Update()

{

}

}

(2)生成SphereMesh并且导出Mesh网格

Sphere思路图:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

using UnityEditor;//unity编辑器命名空间 不支持打包

public class SphereMesh

{

[MenuItem("编辑器/导出网格")]

public static void Init()

{

//顶点助手 能够帮助咱们快速构建mesh网格

VertexHelper vh = new VertexHelper();

//MeshFilter meshFilter;

//画圆

float num = 20;

float rMax = 2; //最大半径 1=1米

float rMin = 1;//最小半径

//圆

//添加顶点

//每一份的弧度

float ang = 2 * Mathf.PI / num;

for (int i = 0; i <= num; i++)

{

float uvx = (float)i / num;

float xMax = Mathf.Sin(ang * i) * rMax;

float yMax = Mathf.Cos(ang * i) * rMax;

vh.AddVert(new Vector3(xMax, yMax, 0), Color.white, new Vector2(uvx, 1));

float xMin = Mathf.Sin(ang * i) * rMin;

float yMin = Mathf.Cos(ang * i) * rMin;

vh.AddVert(new Vector3(xMin, yMin, 0), Color.white, new Vector2(uvx, 0));

}

//绘制圆

for (int i = 0; i < num; i++)

{

vh.AddTriangle(i * 2 + 1, i * 2, (i + 1) * 2);

vh.AddTriangle(i * 2 + 1, (i + 1) * 2, (i + 1) * 2 + 1);

vh.AddTriangle(i * 2 + 1, (i + 1) * 2, i * 2);

vh.AddTriangle(i * 2 + 1, (i + 1) * 2 + 1, (i + 1) * 2);

}

//导出mesh网格

Mesh mesh = new Mesh();

vh.FillMesh(mesh);

//自动计算法线

mesh.RecalculateNormals();

//导出网格

AssetDatabase.CreateAsset(mesh, "Assets/round.asset");

//刷新编辑器

AssetDatabase.Refresh();

}

}

注意:using UnityEditor;为Unity编辑器的命名空间,不支持打包!

原始搭建图:

运行效果图:

这里原本我们选择的Sphere网格就被替换掉了。

这里是导出圆形网格的步骤:

这时你就可以看到你的圆形网格:

相关推荐