Unity3D修改模型的网格数据
来源:互联网 发布:冰川网络业绩下滑 编辑:程序博客网 时间:2024/04/30 08:00
模型导入unity后,可以使用unity的Inspector面板对模型在某个坐标轴上进行平移、旋转和缩放操作(如图1)。
图 1
Inspector面板提供功能是所见即所得的,调整后立刻可以看到效果,相当的方便。但是这些功能还不能完全满足游戏开发的要求,比如为了减轻美工的工作量一些游戏对场景中的模型标准作出了一些规定,使这些模块化的小模型能按照一定的规律拼接成丰富多样的大模型。拼接过程往往要对模型的local coordinates进行调整才能最终形成一个“无缝”的大模型,而这个过程常常是在游戏运行时进行(或者地图初始化时),因此需要引擎提供修改模型mesh的接口。十分幸运的是unity提供了这样的接口。
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.
图 2
如上图,Robot手里拿的枪的网格数据保存在以gun_model命名的Mesh里,而这个Mesh则隶属于Gun_model的MeshFilter。知道了网格数据保存的位置,接下来需要做的就是获取这些数据并修改它们。下面使用一个简单的cliff模型为例子介绍如何修改模型的网格数据。
Simple Example
首先来看原始的模型长什么样?
图 3
现在需要修改模型的网格数据,把模型最高点的高度坐标挑高一倍,代码如下:
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轴进行修改。代码运行的结果如下:
图 4
是不是很简单!unity强大的接口以及较为详细的文档对开发者来说确实是一个福音,另外使用C#编程对于我这苦逼的不合格C++程序员来说确实很爽!
另外有一点值得注意:上述代码所对应的脚本一定要drag到GameObject里MeshFilter的拥有者,才能使代码生效。如下图5必须要把script拖拽到Cliffs01才能生效,因为在cliffs_1cm的GameObject里只有Cliffs01拥有MeshFilter(如图6)
图 5
图 6
References:
[1]http://docs.unity3d.com/Documentation/ScriptReference/MeshFilter-mesh.html
[2]http://docs.unity3d.com/Documentation/ScriptReference/Mesh.html
- Unity3D修改模型的网格数据
- Unity3D修改模型的网格数据
- Unity3D修改模型的网格数据
- unity修改网格数据
- Unity3D 多个网格模型合并 插件
- 三维模型的网格细化
- 三维模型的网格细化
- 三维模型的网格细化
- 三维模型的网格细化
- 三维模型的网格细化
- 三维模型的网格细化
- 数据网格的编辑
- unity3d网格(mesh)编程的研究
- 网格模型
- 网格模型
- 7 数据网格的编辑
- D3D中网格模型的运用
- u3d游戏中显示模型的网格
- MySql 执行JDBC联接(增/删/改/查)操作
- Python学习15:文件操作
- IOS之Quartz2D绘图2.随机绘制五角星
- Hibernate主键策略生成器
- Core Data入门
- Unity3D修改模型的网格数据
- 执行shell脚本时候出现的小问题
- Boyer-Moore算法
- DivideString
- ExpandableListView_2014.07.23
- Spring Mvc 上传图片代码
- 三星6410摄像头测试程序流程分析
- 关于C++中的友元函数的总结
- ios下视频边下载连播放实现