Unity3D的Mesh与MeshFilter的使用

本文介绍了如何通过Unity的MeshFilter组件获取和修改3D模型的网格数据,通过一个简单的示例展示了如何找到并更改模型顶点的高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mesh and MeshFilter

    需要修改模型的网格数据,首先第一步是要想办法获得模型的mesh,这里我们需要Mesh Filter,unity文档中的解释如下:

The Mesh Filter takes a mesh from your assets and passes it to the Mesh Renderer for rendering on the screen.

class-MeshFilter-0

如上图,Robot手里拿的枪的网格数据保存在以gun_model命名的Mesh里,而这个Mesh则隶属于Gun_model的MeshFilter。知道了网格数据保存的位置,接下来需要做的就是获取这些数据并修改它们。下面使用一个简单的cliff模型为例子介绍如何修改模型的网格数据。

 

 

Simple Example

    首先来看原始的模型长什么样?

image图 3

    现在需要修改模型的网格数据,把模型最高点的高度坐标挑高一倍,代码如下:

[csharp]  view plain  copy
  1. using UnityEngine;  
  2. using System.Collections;  
  3.    
  4. [RequireComponent(typeof(MeshFilter))]  
  5. public class example : MonoBehaviour {  
  6.     void Update() {  
  7.         Mesh mesh = GetComponent<MeshFilter>().mesh;  
  8.     Vector3 [] vertices = mesh.vertices;  
  9.           
  10.     int p = 0;  
  11.     int flag = -1;  
  12.     float maxheight = 0.0F;  
  13.     while (p < vertices.Length) {  
  14.         if(vertices[p].z > maxheight) {  
  15.             maxheight = vertices[p].z;  
  16.             flag = p;      
  17.         }  
  18.         p++;  
  19.    }  
  20.     vertices[flag] += new Vector3(0, 0, maxheight);  
  21.           
  22.     mesh.vertices = vertices;  
  23.     mesh.RecalculateNormals();  
  24.     }  
  25. }  

 注意:本例所使用的模型的local坐标系的z轴相当于unity的y轴,因此上述代码时对z轴进行修改。代码运行的结果如下:

image图 4

    是不是很简单!unity强大的接口以及较为详细的文档对开发者来说确实是一个福音,另外使用C#编程对于我这苦逼的不合格C++程序员来说确实很爽!

    另外有一点值得注意:上述代码所对应的脚本一定要drag到GameObject里MeshFilter的拥有者,才能使代码生效。如下图5必须要把script拖拽到Cliffs01才能生效,因为在cliffs_1cm的GameObject里只有Cliffs01拥有MeshFilter(如图6)

image图 5

image

图 6

 





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值