Unity中创建自己的mesh以及动态修改mesh

开头

最近发现有很多人不知道在unity中可以创建和修改mesh,以为mesh只能从3dmax等软件中导入,所以这篇就相当于科普了。

正文

首先介绍如何创建mesh。

这里写图片描述
先创建一个空物体,名为test。

然后为这个物体增加 meshrender 和 meshfilter 两个组件

下面就要写将要赋给它的脚本了,先贴上代码,解释在下面。
using UnityEngine;
using System.Collections;

public class Test: MonoBehaviour
{

    void Start()
    {
        Vector3[] newVertices = { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0) };
        Vector2[] newUV = { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) };
        int[] newTriangles = {0,2,1,0,3,2};

        Mesh mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;

        mesh.vertices = newVertices;
        mesh.uv = newUV;
        mesh.triangles = newTriangles;


    }
}

要创建一个mesh必须要准备好三个数组分别是顶点数组,三角形数组,uv数组。

  • 顶点数组 包括这个mesh中所有的顶点,如 Vector3[] newVertices = { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0) }; 其中有四个顶点,分别为正方形四个角。
  • 三角形数组 指定如何构成每个三角形,同时也确定了三角形的个数,如 int[] newTriangles = {0,2,1,0,3,2}; 这行代码表示0,2,1(对应着newVertices[0],newVertices [2],newVertices [1]),构成第一个三角形的三个角,数字的顺序表示顺逆时针,同时确定了三角形的正反面,后面的0,3,2同理,这就代表此mesh有两个三角形。
  • uv数组 这是一个vector2数组,用来确定顶点数组中每个顶点的uv坐标,这在下面将演示给大家看。

代码写好之后,把脚本贴到Test物体上,然后设置一个material,如下图:
这里写图片描述

下面是运行后的图片:
这里写图片描述

至于为什么uv数组是什么,你可以认为这张图片的四个角的uv坐标分别为(0,0),(1,0),(1,1),(1,0),如果我把上面代码中的uv数组改成 Vector2[] newUV = { new Vector2(0, 0), new Vector2(0, 1), new Vector2(0.5f, 1), new Vector2(0.5f, 0) }; 那就会变成下面这个样子:
这里写图片描述

有一点要注意的是,顶点数组中的顶点坐标都是在模型坐标系中的,就是以刚开始创建的Test空物体的坐标为原点。

以上只是简单创建了一个平面mesh,至于如何创建3d mesh和修改mesh,相信聪明的你一定会啦。

最后

就这样了  如果有错误或疑问,请评论,如果觉得还不错或有帮助,请关注或顶一下,谢谢啦~~~ (´・ω・`) 
  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Unity动态Mesh指的是在游戏运行时使用代码生成、修改和控制游戏对象的网格(Mesh)的过程。Mesh是3D模型的基本组成部分,由顶点、三角形面和纹理坐标等数据组成。 在Unity,可以通过脚本代码来动态创建修改和控制一个游戏对象的Mesh。例如,可以通过代码动态生成一个平面、立方体或其他形状的Mesh,然后根据需要调整其顶点坐标、法线、纹理坐标以及三角形面的连接关系等。这样可以实现一些特殊的效果,比如模型的变形、碰撞检测、粒子效果等。 动态Mesh的优势在于它可以在运行时根据游戏逻辑来生成和修改网格,而不需要事先预定义好所有可能的模型。这样在游戏就可以根据游戏需求生成各种形状独特的道具、场景和角色等。而且,动态Mesh还可以根据游戏对象的运动状态来实时修改网格,使其能够更加逼真地反映游戏对象的变化。 然而,动态Mesh的生成和修改也需要一定的计算资源和代码编写技巧。过多的Mesh变化可能会导致性能下降,因此在使用动态Mesh时需要注意优化。此外,代码编写方面也需要对Mesh的数据结构和相关API有一定的理解,以保证以正确的方式生成和修改Mesh。 总之,Unity动态Mesh是一项强大而灵活的功能,可以帮助开发者实现更加个性化和富有创意的游戏效果。通过脚本代码的控制和调整,可以在游戏实时生成、修改和控制各种形状和表现力的网格,从而提升游戏的可玩性和视觉效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值