如何获取unity3d mesh的mesh属性

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)
Unity3D研究院之游戏对象的访问绘制线与绘制面详解(十七)
围观63542次
编辑日期: 字体:
一眨眼学习Unity3D 也有一段时间了,基本已经拿下了这套游戏引擎,回过头来想想以前写的RPG 游戏引擎,越来越发现以前写的就是垃圾。人果然是要不断学习与不断进步,好好学习,天天向上。哇咔咔~ 加油!!
最近做一个项目须要去绘制线与绘制面,那么把这两天的学习笔记整理一下,一是给自己留作备忘,二是方便初学者学习。
任何一个无规则曲线它都是有若干个线段组成,及时是圆形它也是又若干个线段组成的,也就是说将若干个线段拼接起来就是我们须要的无规则曲线~那么在3D 的世界中我们须要知道 X Y Z 三个点来确定一条3D线段。
首先先使用Unity编辑器的方式来添加一条线~
Unity -& GameObject -& Create Empty 创建一个空的对象,我命名为line。然后点击 Component -& Miscellaneous -& Line Renderer 给line添加一个线渲染器的属性,Line Renderer是非常中的属性,下面我会详细的说明。
Create -& Material 创建一个材质,做来这个线段的贴图,下面我们看看Line Renderer的一些重要参数。
Cast Shadows: 是否投射阴影。
Receive Shadows: 是否接收阴影。
Materials :设置材质,这里可以设置多个材质, line就是上面我们创建的材质,这里我给line这个材质涂上了红颜色。
Positions:这个属性就比较重要了,它是专门设置线段在3D 世界中的点的坐标,size 设置点的数量 为3 那么将会有3个点,Element 0
Element 1 Element 2
这三个点将确定这条曲线分为两段,第一段是(0,0,1) 到
(0,0,2) ,第二段是 (0,0,2) 到(0,0,4)。
Paramerters
StartWidth :设置起点的宽度
设置终点的宽度 ,这两项数值默认为1,但是现实起来很宽,所以一般都设置为0.几~
Start Color: 设置起点颜色
Start Color: 设置终点颜色
Use World Space 使用世界坐标系
大家看看效果,清楚的可以看到曲线分为两部分,第一部分较短 第二部分较长。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
using UnityEngine;using System.Collections;using System.Threading;&public class Main : MonoBehaviour {& //游戏对象,这里是线段对象 private GameObject LineRenderGameObject;& //线段渲染器 private LineRenderer lineRenderer;& //设置线段的个数,标示一个曲线由几条线段组成 private int lineLength = 4;& //分别记录4个点,通过这4个三维世界中的点去连接一条线段 private Vector3 v0 = new Vector3(1.0f,0.0f,0.0f); private Vector3 v1 = new Vector3(0.0f,1.0f,0.0f); private Vector3 v2 = new Vector3(0.0f,0.0f,1.0f); private Vector3 v3 = new Vector3(1.0f,0.0f,0.0f);& void Start(){&
//通过之前创建的对象的名称,就可以在其它类中得到这个对象,
//这里在main.cs中拿到line的对象
LineRenderGameObject = GameObject.Find ("line");&
//通过游戏对象,GetComponent方法 传入LineRenderer
//就是之前给line游戏对象添加的渲染器属性
//有了这个对象才可以为游戏世界渲染线段
lineRenderer = (LineRenderer)LineRenderGameObject.GetComponent ("LineRenderer");&
//设置线段长度,这个数值须要和绘制线3D点的数量想等
//否则会抛异常~~
lineRenderer.SetVertexCount(lineLength);& } & void Update() {&
//在游戏更新中去设置点
//根据点将这个曲线链接起来
//第一个参数为 点的ID
//第二个 参数为点的3D坐标
//ID 一样的话就标明是一条线段
//所以盆友们须要注意一下!&
lineRenderer.SetPosition (0, v0);
lineRenderer.SetPosition (1, v1);
lineRenderer.SetPosition (2, v2);
lineRenderer.SetPosition (3, v3);& }&}
通过上面代码的设置,运行游戏,发现全新的一个三角形曲线赫然的映入我们的眼帘,有了上面的方法我们就可以组合的绘制出各种各样的3D 游戏曲线了,这里MOMO使用的是颜色,大家也可以添加一个贴图~
绘制面的话~,因为3D世界中游戏面全都是用三角形来拼起来的(出于效率的考虑),所以大家所看到的面其实都是用三角面拼接起来的。那么下面我们看看在Unity3D 中如何绘制三角形平面。先创建一个GameObject对象,我命名为face,然后给这个对象添加两个Mesh属性, 添加MeshFilter(网格过滤器)与mesh Renderer(网格渲染器)属性,这样子就可以绘制网格面了。
1234567891011121314151617181920212223242526272829303132333435363738
using UnityEngine;using System.Collections;&public class Main : MonoBehaviour {& // Update is called once per frame void Update () {&
//通过object对象名 face 得到网格渲染器对象
MeshFilter meshFilter = (MeshFilter)GameObject.Find("face").GetComponent(typeof(MeshFilter));&
//通过渲染器对象得到网格对象
Mesh mesh = meshFilter.mesh;& &&&&//API中写的不是提清楚,我详细的在说一遍& &&&&//设置顶点,这个属性非常重要 &&&&//三个点确定一个面,所以Vector3数组的数量一定是3个倍数 &&&&//遵循顺时针三点确定一面 &&&&//这里的数量为6 也就是我创建了2个三角面 &&&&//依次填写3D坐标点
mesh.vertices = new Vector3[] {new Vector3(5, 0, 0), new Vector3(0, 5, 0), new Vector3(0, 0, 5),new Vector3(-5, 0, 0), new Vector3(0, -5, 0), new Vector3(0, 0, -5)};&
//设置贴图点,因为面确定出来以后就是就是2D
//所以贴纸贴图数量为Vector2
//第一个三角形设置5个贴图
//第二个三角形设置一个贴图
//数值数量依然要和顶点的数量一样
mesh.uv = new Vector2[] {new Vector2(0, 0), new Vector2(0, 5), new Vector2(5, 5),new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1)};&
//设置三角形索引,这个索引是根据上面顶点坐标数组的索引
//对应着定点数组Vector3中的每一项
//最后将两个三角形绘制在平面中
//数值数量依然要和顶点的数量一样
mesh.triangles= new int []{0,1,2,3,4,5};& }}
Build and Run
运行效果后清楚的可以看到两个三角形。MOMO提醒大家 善用三角平面可以绘制出各种各样的游戏面出来噢~哇咔咔~
最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,总的来说这一章还是比较简单的,不过也是非常重要的一章。代码我就不上传了。哇咔咔~ MOMO愿和 大家好好学习,大家一起进步哈~!!!
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!
Pingback 引用通告:后使用快捷导航没有帐号?
只需一步,快速开始
&加载中...
查看: 1379|回复: 18
强大的U3D模型mesh特效包Mesh Effects,高品质视觉效果必备~!
TA的其他好贴
马上注册,加入CGJOY,让你轻松玩转CGJOY。
才可以下载或查看,没有帐号?
游客,本付费内容需要支付 28张CG券 才能下载
8p756b535jpe.png (307.38 KB, 下载次数: 1)
09:17 上传
mfxs288sqmkef.jpg (33.14 KB, 下载次数: 0)
09:17 上传
145242rhoa2hdh1y5frbl2.jpg (30.61 KB, 下载次数: 0)
09:17 上传
145244piq8e3nzz8yzp8qe.jpg (32.21 KB, 下载次数: 0)
09:17 上传
145244kuvvicircib1drza.jpg (31.75 KB, 下载次数: 0)
09:17 上传
abqlozb3oqbe4.jpg (41.24 KB, 下载次数: 0)
09:17 上传
145243jlclr9bvstryvsft.jpg (31.17 KB, 下载次数: 0)
09:17 上传
02mu4674561b.jpg (28.5 KB, 下载次数: 0)
09:17 上传
QQ截图36.png (75.44 KB, 下载次数: 0)
09:17 上传
QQ截图31.png (183.26 KB, 下载次数: 0)
09:17 上传
QQ截图57.png (172.08 KB, 下载次数: 0)
09:17 上传
谢谢分享!CGJOY大家庭需要你!
如何让别人关注你?
谢谢楼主分享~
本楼回复(<span id="dp_count_)
如何让别人关注你?
不错的资源,支持
本楼回复(<span id="dp_count_)
如何让别人关注你?
不错,又占了一个沙发!
本楼回复(<span id="dp_count_)
如何让别人关注你?
我先定一个小目标,比方说我先达到楼主的水平!
本楼回复(<span id="dp_count_)
如何让别人关注你?
谢谢分享!!!!!!!!
本楼回复(<span id="dp_count_)
如何让别人关注你?
牛逼不错的东西,感谢楼主分享!
本楼回复(<span id="dp_count_)
如何让别人关注你?
厉害了我的哥!
本楼回复(<span id="dp_count_)
如何让别人关注你?
厉害了我的哥!
本楼回复(<span id="dp_count_)
如何让别人关注你?
厉害了我的哥!
本楼回复(<span id="dp_count_)
如何让别人关注你?
Powered by怎么判断物体的Mesh Renderer是否关闭?【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:75,260贴子:
怎么判断物体的Mesh Renderer是否关闭?收藏
研究了半天。查找物体 获取组件
然后if(obj.Mesh Renderer = false)
或者if(obj.Mesh Renderer.enabled = false) 都不太好用啊。
达内unity3d培训全程&实战教学&,unity3d金牌讲师授课.免费unity3d课程试听中!到达内unity3d学院学习unity3d,只需4个月速成unity3d游戏工程师.
把你的=换成==,前者在语言中是赋值的符号,后者才是等于
if(obj.Getcomponent&MeshRender&() == null)
登录百度帐号推荐应用下次自动登录
现在的位置:
& 综合 & 正文
【边玩边学Unity3d】Mesh属性
Unity没有建模工具,大多是在其他3D软件中建模后导入Unity资源中使用。但通过脚本可以修改网格的顶点属性,所以理论上可以实现在Unity中从无到有地建模。
建模,就是建网格;建网格,就是画些三角形;画个三角形呢,也就是定位三个点。
不过首先了解下Unity中网格的特性。Unity中的对象就是GameObject了,每个GameObject都可以有一个MeshFilter组件(也可以没有),该组件又有mesh属性(这个一定有),而该属性又有个vertives,也就是一个Vector3数组,储存着顶点信息。
下面就是写个脚本来看看mesh里的东东都是些什么了。
代码功能即:点击Tab键轮询场景中所有GameObject,以获取其MeshFilter.mesh,并在GUI中显示mesh的主要属性内容顶点坐标,法线,三角形的绘制序列等等。(代码写的很仓促,只为了显示内容。)
代码直接拖到mainCamera中即可。可在场景中建几个Cube、Plane什么的看看。
下图即是一个立方体的mesh内容:
了解了网格内容,下次可以试着通过代码动态绘制个简单的网格了。
&&&&推荐文章:
【上篇】【下篇】}

我要回帖

更多关于 unity3d mesh 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信