问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何获取unity3d 的mesh属性

发布网友 发布时间:2022-04-22 08:24

我来回答

2个回答

热心网友 时间:2022-06-18 13:54

nity没有建模工具,大多是在其他3D软件中建模后导入Unity资源中使用。但通过脚本可以修改网格的顶点属性,所以理论上可以实现在Unity中从无到有地建模。

建模,就是建网格;建网格,就是画些三角形;画个三角形呢,也就是定位三个点。

不过首先了解下Unity中网格的特性。Unity中的对象就是GameObject了,每个GameObject都可以有一个MeshFilter组件(也可以没有),该组件又有mesh属性(这个一定有),而该属性又有个vertives,也就是一个Vector3数组,储存着顶点信息。

下面就是写个脚本来看看mesh里的东东都是些什么了。

代码功能即:点击Tab键轮询场景中所有GameObject,以获取其MeshFilter.mesh,并在GUI中显示mesh的主要属性内容顶点坐标,法线,三角形的绘制序列等等。(代码写的很仓促,只为了显示内容。)
代码直接拖到mainCamera中即可。可在场景中建几个Cube、Plane什么的看看。
如果有什么需要的unity插件的话可以到纳金网论坛上去找http://www.narkii.com/club/forum-51-1.html

热心网友 时间:2022-06-18 13:54

代码功能即:点击Tab键轮询场景中所有GameObject,以获取其MeshFilter.mesh,并在GUI中显示mesh的主要属性内容顶点坐标,法线,三角形的绘制序列等等。(代码写的很仓促,只为了显示内容。)
代码直接拖到mainCamera中即可。可在场景中建几个Cube、Plane什么的看看。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MeshPrinter : MonoBehaviour {

private string text_name;
private string text_vertices;
private string text_normals;
private string text_triangles;
private string text_uv;
private string text_tangents;

public MeshFilter mCurrentFilter;

public List<MeshFilter> targets;

void Start () {

targets = new List<MeshFilter>();
AddAllTargets();

mCurrentFilter = null;

}

void Update () {

if(Input.GetKeyUp(KeyCode.Tab)){
TargetMesh();
FillText();
}
}

void OnGUI(){

float _x = 10;
Vector2 textSize = GUI.skin.label.CalcSize (new GUIContent(text_name));
GUI.Label(new Rect(_x, 10 ,textSize.x, textSize.y), text_name);

textSize = GUI.skin.label.CalcSize (new GUIContent(text_triangles));
GUI.Label(new Rect(_x, 30 ,textSize.x, textSize.y), text_triangles);

_x += textSize.x +20;
textSize = GUI.skin.label.CalcSize (new GUIContent(text_vertices));
GUI.Label(new Rect(_x, 30 ,textSize.x, textSize.y), text_vertices);

_x += textSize.x +20;
textSize = GUI.skin.label.CalcSize (new GUIContent(text_normals));
GUI.Label(new Rect(_x, 30 ,textSize.x, textSize.y), text_normals);

_x += textSize.x +20;
textSize = GUI.skin.label.CalcSize (new GUIContent(text_tangents));
GUI.Label(new Rect(_x, 30 ,textSize.x, textSize.y), text_tangents);

_x += textSize.x +20;
textSize = GUI.skin.label.CalcSize (new GUIContent(text_uv));
GUI.Label(new Rect(_x, 30 ,textSize.x, textSize.y), text_uv);

}

public void AddAllTargets(){

GameObject[] gos = GameObject.FindObjectsOfType(typeof(GameObject)) as GameObject[];
foreach(GameObject go in gos)
if(go.GetComponent<MeshFilter>() != null)
AddTarget( go.GetComponent<MeshFilter>());
}

public void AddTarget(MeshFilter target){

targets.Add(target);
}

private void TargetMesh(){

if(mCurrentFilter == null){
mCurrentFilter = targets[0];
}else{
int index = targets.IndexOf(mCurrentFilter);
if(index < targets.Count-1){
index ++;
}else{
index = 0;
}
mCurrentFilter = targets[index];
}
}

private void FillText(){

text_name = "Name: " + mCurrentFilter.gameObject.name;

Mesh mesh = mCurrentFilter.mesh;

int size = mesh.vertexCount;
text_vertices = "vertices: "+ size + "\n";
for(int i = 0; i<size; i++){
text_vertices += i + ": " + mesh.vertices[i][0]+","+mesh.vertices[i][1]+","+mesh.vertices[i][2]+";\n";
}

size = mesh.normals.Length;
text_normals = "normals: " + size + "\n";
for(int i = 0; i<size; i++){
text_normals += mesh.normals[i].x +","+ mesh.normals[i].y +","+mesh.normals[i].z +";\n";
}

size = mesh.triangles.Length ;
text_triangles = "triangles: " + size + "\n";
for(int i = 0; i<size/3; i++){
text_triangles += mesh.triangles [3*i] +","+ mesh.triangles [3*i+1] +","+mesh.triangles [3*i+2] +";\n";
}

size = mesh.uv.Length ;
text_uv = "uv: " + size + "\n";
for(int i = 0; i<size; i++){
text_uv += mesh.uv [i][0] +","+ mesh.uv [i][1] +";\n";

}
size = mesh.tangents.Length ;text_tangents = "tangents: " + size + "\n";
for(int i = 0; i<size; i++){
text_tangents += mesh.tangents[i][0] + ", "+ mesh.tangents[i][1] + ", "+mesh.tangents[i][2] + ", "+mesh.tangents[i][3] +";\n";
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 玫瑰花茶泡完到底是红的还是绿色 云南产的泡出来是红的酸的花茶是什么 苹果笔记本MacBook Pro(MC723CH/A)不装双系统.能玩... 我是一外企的市场部主管,经常外出谈业务办公,但是... 刁做姓氏怎么读 联想笔记本电脑右边的USB接鼠标没反应了但是灯会一... 我是一外企的市场部主管,经常外出谈业务办公,但... &quot;刁&quot;在百家姓里的读音? 求下联 上联:牛言柳燕留言流岩,尽是流言! 笔记本WIFI间歇性断网,但右下角显示连接正常,修... 泡开的田螺型茉莉花茶为红色是什么原因? 分娩时要经历的5件尴尬事是什么?你都经历过几个? 男人为什么叼黑 笔记本为什么外接显示器右边显示不全 牛年佳话知多少? 我想做玩具批发,哪里可以拿到好的货 女人分娩时可能要经历种种尴尬,该如何应对? 黑社会嘴里叼牙签是什么意思 花果茶泡出来是红色的,正常吗? 笔记本电脑右侧的接口全部失灵 男士运动鞋为什么没有38码的 21世纪恐怖分子前十名排行榜 我开了毛绒玩具现在想拿货不知道在哪拿!知道的请... 女人从怀孕到生孩子要经历怎样的痛苦呢?这样的痛... 跑业务办公用是买超极本还是笔记本 红茶是红tea,绿茶是绿tea,那么花茶应该怎么念呢 笔记本电脑左边的USB接口能正常使用,右边的USB接口... 牛言非羽 请大家帮忙给解释一下好吗写个成语出来 ... 生孩子前过程 我去汕头想批发点玩具说叫我们在花钱拿货!这样我... 请问“综合办公”业务是什么?业务功能有哪些? X-plane9或10哪有下载的,要中文版的全球地图包。 运动鞋38码雪地靴多少码 新买的移动硬盘接笔记本右侧USB接触不良,但接到左... 介个系牛言什么意思 天翼云办公业务的特点是什么? ij38是什么码 深圳做玩具批发去哪里拿货 刁 和 叼 有什么区别 刁烟和叼烟有什么不同 笔记本电脑右下角连接网络图标显示未连接,但是能上网