Unity通过脚本创建网格Mesh的方法

目录
  • 1.创建一个带Mesh的物体
  • 2.通过脚本创建Mesh

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
运行结果

图片很暗是因为场景中没有光照

到此这篇关于Unity通过脚本创建Mesh(网格)的文章就介绍到这了,更多相关Unity创建Mesh内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • unity通过Mesh网格绘制图形球体

    本文实例为大家分享了unity通过Mesh网格绘制球体的具体代码,供大家参考,具体内容如下 接着上一篇文章说: 球体 public class 球体 : MonoBehaviour { MeshRenderer meshRenderer; MeshFilter meshFilter; List<Vector3> verts; List<int> indices; int N = 10; void Start() { verts = new List<Vector3>()

  • unity自带寻路(导航)系统 Nav Mesh导航网格

    本文为大家分享了unity自带寻路(导航)系统的具体代码,供大家参考,具体内容如下 一.介绍 unity官方文档: 导航网格(即 Navigation Mesh,缩写为 NavMesh)是一种数据结构,用于描述游戏世界的可行走表面,并允许在游戏世界中寻找从一个可行走位置到另一个可行走位置的路径.该数据结构是从关卡几何体自动构建或烘焙的. 我们可以这么理解:它是unity官方自带的一种寻路系统.我们可以通过它来制作简单的寻路,比如可以制作点击某个位置,让角色自动的绕开障碍走到目标点的效果,比如可以

  • unity通过Mesh网格绘制图形(三角形、正方体、圆柱)

    一.介绍 Mesh类:通过脚本创建或是获取网格的类,网格包含多个顶点和三角形数组.顶点信息包含坐标和所在面的法线. unity中3D的世界的所有图形全部都是由三角形构成的. 比如unity已经装配好的几种图形我们可以看一下: 我们可以在unity中通过Mesh类来绘制图形. 所以在我们绘制其它图形之前,首先完成一个小目标,画一个三角形. 二.绘制三角形 首先做准备工作: 1.在场景中创建一个空物体,并挂载MeshRenderer和MeshFilter组件.//我们先不考虑碰撞器的问题,所以不添加

  • 游戏开发进阶Unity网格(Mesh\动态合批\骨骼动画\蒙皮)

    目录 一.前言 二.Hello Mesh 三.萌新初识Mesh 1.引擎内置的Mesh 2.Mesh是什么 三.Mesh的创建方式 1.第三方建模软件 2.Unity建模插件:ProBuilder 3.程序动态生成网格 四.Unity中如何显示网格 1.MeshFilter:网格过滤器 2.MeshRenderer:网格渲染器 3.SkinnedMeshRenderer:蒙皮网格渲染器 3.1 骨骼动画 3.2 SkinnedMeshRenderer组件 3.2 使用BakeMesh进行优化 五

  • Unity通过脚本创建网格Mesh的方法

    目录 1.创建一个带Mesh的物体 2.通过脚本创建Mesh 1.创建一个带Mesh的物体 Unity中的网格作为组件不能脱离物体单独存在新建脚本CreateMesh public class CreateMesh: MonoBehaviour { void Start() { //该方法会新建一个名为Mesh的GameObject,该物体上包含一个 MeshFilter 和一个 MeshRenderer GameObject gameObject = new GameObject("Mesh&

  • python geopandas读取、创建shapefile文件的方法

    shapefile是GIS中非常重要的一种数据类型,在ArcGIS中被称为要素类(Feature Class),主要包括点(point).线(polyline)和多边形(polygon).作为一种十分常见的矢量文件格式,geopandas对shapefile提供了很好的读取和写出支持,其DataFrame结构相当于GIS数据中的一张属性表,使得可以直接操作矢量数据属性表,使得在python中操作地理数据更方便.本文给大家介绍下用Python脚本中对Shapefile文件(.shp,.shx,.d

  • Unity之Luaframework框架lua调用C#方法

    前言 最近,新来的同事写接口,需要知道lua怎么调用C#脚本,趁这个机会也给大家分享一下.道理我也不多少,直接上干货. 框架介绍 本项目采用luaframework+ugui,详情咨询度娘. 框架: 创建C#类 首先写个C#脚本,这个脚本里的方法是我们需要在lua中调用的,这里需要调用的方法命名为ShirlnDebug using System.Collections; using System.Collections.Generic; using UnityEngine; public cla

  • Unity实现游戏伤害数字显示HUD的方法

    目录 伤害数字显示HUD Demo展示 HUDPopup类 伤害数字显示HUD 游戏中收到伤害掉血,会有飘动的伤害数值: 可以使用OnGUI中GUI.Label来实现: 可自定义字体,颜色,大小等: 如果需要更好看的数字特效,可以手动添加: 普通字体不够好看可以使用插件FontEditor自定义: Demo展示 HUDPopup类 飘血数字类,创建一个空物体,将这个脚本挂上去,再将这个物体拖成预制体: public class HUDPopup : MonoBehaviour { //目标位置

  • 用.NET创建Windows服务的方法第1/2页

    译者说明:我是通过翻译来学习C#的,文中涉及到的有Visual Studio.NET有关操作,我都根据中文版的VS.NET显示信息来处理的,可以让大家不致有误解. 作者:Mark Strawmyer 我们将研究如何创建一个作为Windows服务的应用程序.内容包含什么是Windows服务,如何创建.安装和调试它们.会用到System.ServiceProcess.ServiceBase命名空间的类. 什么是Windows服务? Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器

  • Linux 创建子进程执行任务的实现方法

    Linux 操作系统紧紧依赖进程创建来满足用户的需求.例如,只要用户输入一条命令,shell 进程就创建一个新进程,新进程运行 shell 的另一个拷贝并执行用户输入的命令.Linux 系统中通过 fork/vfork 系统调用来创建新进程.本文将介绍如何使用 fork/vfork 系统调用来创建新进程并使用 exec 族函数在新进程中执行任务. fork 系统调用 要创建一个进程,最基本的系统调用是 fork: # include <unistd.h> pid_t fork(void); p

  • Python实现按当前日期(年、月、日)创建多级目录的方法

    先看实际效果,现在时间2018.4.26 使用python脚本按照年月日生成多级目录,创建的目录可以将系统生成的日志文件放入其中,方便查阅,代码如下: #!/usr/bin/env python #coding=utf-8 import time import os #获得当前系统时间的字符串 localtime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) print('localtime='+localtime)

  • ZABBIX3.2使用python脚本实现监控报表的方法

    如下所示: #!/usr/bin/python #coding:utf-8 import MySQLdb import time,datetime #zabbix数据库信息: zdbhost = '172.16.8.200' zdbuser = 'zabbix' zdbpass = 'zabbix' zdbport = 3306 zdbname = 'zabbix' #生成文件名称: xlsfilename = 'zabbix.xls' #需要查询的key列表 [名称,表名,key值,取值,格式

  • python 实现创建文件夹和创建日志文件的方法

    一.实现创建文件夹和日志 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author: nulige import os import datetime #获取系统时间 log_path_suffix = datetime.datetime.now().strftime('%Y-%m-%d ') #创建文件夹 folder_name = '\log' root_directory = 'D:\python\disk_monitor' try: os

随机推荐