先给空对象添加组件(MeshFilter网格过滤器,MeshRenderer网格渲染器)
脚本创建顶点集合(Vector3类型)和绘制顺序集合(int类型)
在顶点集合中添加顶点位置,在绘制顺序集合中添加绘制顺序(顺时针绘制可以看见mesh网格,逆时针可以在背面看见网格)
把顶点数据和绘制顺序赋值给MeshFilter(转成数组)
绘制反方向的物体则需要将绘制的物体绘制顺序反向存到集合中,顶点顺序不变
脚本中定义一个公开mesh变量选择一种物体的mesh网格
代码如下
public class Cube : MonoBehaviour
{
public Mesh spheremesh;
// Start is called before the first frame update
void Start()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
List<Vector3> vlist = new List<Vector3>();
List<int> tlist = new List<int>();
for (int i = 0; i < spheremesh.vertices.Length; i++)
{
vlist.Add(spheremesh.vertices[i]*3);
}
mesh.vertices = vlist.ToArray();
for (int i = spheremesh.triangles.Length - 1; i >= 0; i--)
{
tlist.Add(spheremesh.triangles[i]);
}
mesh.triangles = tlist.ToArray();
GetComponent<MeshCollider>().sharedMesh = mesh;
}
}
绘制碰撞器网格获取MeshCollider中的sharedMesh,将mesh数据赋值给sharedMesh