Unity3D动态生成模型..docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Unity3D动态生成模型.

unity3d 运行时 动态生成模型《一》?2014-01-21 11:19:41|??分类:?技术相关?|??标签:unity3d?动态生成模型?mesh?shader?colider?|举报|字号?订阅一般,unity3d开发都是使用第三方工具提前做好模型,如3dmax,sketchUP,Maya等。这一点对于游戏行业基本已经够用了,甚至对于游戏行业来说,unity3d后续版本不断强化的动画系统也是一个无需求的产品。因为,对于游戏开发来说,unity3d就如他的名字一般,他只是一个整合工具,将3d模型与代码粘合到一起,达到预期的效果。所以,对于游戏,个人觉得,其主要竞争力在于画面特效,即在于美工,而非coder。当然并不是说coder不重要。不幸的是本人为一名coder,更为不幸的是,本人从事的并非游戏业,而是虚拟现实。对于该行业,很多人的认识还停留在厂区漫游等比较傻瓜化的互动,个人觉得这种傻瓜式的漫游,适用的行业,约莫也只有楼盘展示以及一些港口的面子工程了。对于工业控制系统的信息化需求来说,其没有任何实用价值。本文要实现的功能是动态生成模型。为这个系列的第一章。其目标在于根据用户的输入生成出指定的模型。本文实现的是简单的隧道模型,如果对于复杂的模型,需要精细的数学知识扩充,但对于unity3d的使用则无两样,均通过指定的一些方法实现。这个需求,在非静态工厂的监控很为强烈,因为场景经常变化,不可能让工程人员或者研发人员在现场一直维护。动态生成模型,则我们需要知道模型都需要哪些信息才能展现出来。此处,我们需要用到的是unity3d的Mesh(网格)、Material(材质,其中包含贴图)、Collider(碰撞体,游戏效果,否则就被当空气穿越了)。模型,首先需要骨架,即哪些顶点。撑起一个骨架,另外还需要一些线把这些点连接起来,因为并不是所有的点都两两互联,那样就不是模型,而是打结的渔网了。1、计算顶点,方法参考数学,因为不是本文重点,跳过。暂定顶点的寄存器为Vector3[] vertexArray。2、计算三角面。此处三角面的计算,需要注意的是右手螺旋定律,即法线方向是根据顶点的右手螺旋,大拇指方向。搞清楚这一点,就运用你的数学知识计算三角面阵列吧。此处三角面阵列比较坑爹的是,我也不懂为什么unity3d的API接收的参数竟然是int[],而不是我预期的Vector3[],不过还好,其实你把每三个int组成一个Vector3,就是对应三角面的三个顶点,再次强调,注意顶点顺序,右手螺旋。暂定三角面的寄存器为int[] triangleArray;3、展UV,这个,对于熟悉3dmax、maya、sketchup中一款的人就应该很熟悉UV的作用,他其实就是扒皮,把模型表层扒下来,定上UV坐标,然后贴图就按照这个UV坐标往上面对齐。展UV的算法,实在太多了,网上可以找一坨。本文的模型为隧道,不是复杂模型,就直接快速展UV,对准某个面直接压下去。如果不会的话,看看3dmax的快速展UV就知道了。UV是二维坐标,这个就不用我解释了吧,如果这个不清楚的话,建议重学3dmax。暂定UV的寄存器为Vector2[] UVArray。4、进行赋值到Mesh,并重新计算下法线。MeshFilter meshF = cannelObject.AddComponentMeshFilter();Mesh mesh = meshF.mesh;mesh.vertices = vertexArray;mesh.triangles = triangleArray;mesh.uv = UVArray;mesh.RecalculateNormals();5、现在物体已经存在了骨骼。下面就是给物体添加渲染器,让其在场景中渲染出来。第一步先寻找一个的Shader,当然你也可以自己定义一个。6、定好Shader之后,再找一张贴图。贴图是ps自己做还是网上找一个,这个随便你了。MeshRenderer meshR = cannelObject.AddComponentMeshRenderer();Material material = new Material(Shader.Find(@Diffuse));material.mainTexture = p_texture;meshR.materials = new Material[] { material };7、现在已经可以看到这个物体了,在场景里面。下面就为其添加碰撞器,让其符合游戏特性。MeshCollider collider = cannelObject.AddComponentMeshCollider();8、现在一切都已经成功了,下面就是把这个创建的游戏物体放到指定的位置,并以其指定的空间角存在。cann

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档