关键词:
一、什么是3D模型?
1.1 3D模型概述
简而言之,3D模型就是三维的、立体的模型,D是英文Dimensions的缩写。
3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑、人物、植被、机械等等,比如一个大楼的3D模型图。3D模型也包括玩具和电脑模型领域。
互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯、电子阅读、网络游戏、虚拟社区、电子商务、远程教育等等。甚至对于旅游业,3D互联网也能够起到推动的作用,一些世界名胜、雕塑、古董将在互联网上以3D的形式来让用户体验,这种体验的真实震撼程度要远超现在的2D环境。
1.2 如何构建3D模型
二、Unity中的3D模型基础
2.1 认识游戏对象
(1)相信大家经过前一篇博客《Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生》初步认识Unity3D之后,对于Hierarchy中的游戏对象有了初步认识了吧。Hierarchy中显示的是GameObject—游戏对象,每个游戏都至少有一个Camera,点击Camera就可以在Preview(预览视图)中看到摄像机的视角画面。
(2)每个GameObject都有三组属性:Position(位置)、Rotation(旋转、角度)与Scale(缩放大小)三组属性。Position控制游戏对象在三维空间中的坐标,Rotation控制游戏对象显示的角度,而Scale则控制游戏对象缩放的比例。
2.2 认识左手坐标系
Unity3D采用的是左手坐标系:沿屏幕横向为x轴,沿屏幕纵向为y轴,垂直屏幕方向为z轴。右、上、背向观众的三个方向为正方向。也许这么阐述大家还是不明白,但没关系,我们先来看看空间几何常见的坐标系类型。
①空间直角坐标系
以空间一点O为原点,建立三条两两垂直的数轴;x轴(横轴),y轴(纵轴),z轴(竖轴),这时建立了空间直角坐标系Oxyz,其中点O叫做坐标原点,三条轴统称为坐标轴,由坐标轴确定的平面叫坐标平面。
各轴之间的顺序要求符合右手法则,即以右手握住Z轴,让右手的四指从X轴的正向以90度的直角转向Y轴的正向,这时大拇指所指的方向就是Z轴的正向。这样的三个坐标轴构成的坐标系称为右手空间直角坐标系。与之相对应的是左手空间直角坐标系。
一般在数学中更常用右手空间直角坐标系,在其他学科方面因应用方便而异。三条坐标轴中的任意两条都可以确定一个平面,称为坐标面。它们是:由X轴及Y轴所确定的XOY平面;由Y轴及Z轴所确定的YOZ平面;由X轴及Z轴所确定的XOZ平面。
这三个相互垂直的坐标面把空间分成八个部分,每一部分称为一个卦限。位于X,Y,Z轴的正半轴的卦限称为第一卦限,从第一卦限开始,在XOY平面上方的卦限,按逆时针方向依次称为第二,三,四卦限;第一,二,三,四卦限下方的卦限依次称为第五,六,七,八卦限。
②右手坐标系
右手坐标系在中学学空间几何的时候经常会用到。在三维坐标系中,Z轴的正轴方向是根据右手定则确定的。右手定则也决定三维空间中任一坐标轴的正旋转方向。要标注X、Y和Z轴的正轴方向,就将右手背对着屏幕放置,拇指即指向X轴的正方向。伸出食指和中指,如下图所示,食指指向Y轴的正方向,中指所指示的方向即是Z轴的正方向。要确定轴的正旋转方向,如下图所示,用右手的大拇指指向轴的正方向,弯曲手指。那么手指所指示的方向即是轴的正旋转方向。
③左手坐标系
伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上。其余的手指指向前方。如下图所示,这样就建立了一个左手坐标系。拇指、食指和其余手指分别代表x,y,z轴的正方向。判断方法:在空间直角坐标系中,让左手拇指指向x轴的正方向,食指指向y轴的正方向,如果中指能指向z轴的正方向,则称这个坐标系为左手直角坐标系.反之则是右手直角坐标系。
④左手坐标系与右手坐标系的比较
左手坐标系是X轴向右,Y轴向上,Z轴向前,右手坐标系的Z轴正好相反,是指向“自己”的,在计算机中通常使用的是左手坐标系,而数学中则通常使用右手坐标系。计算机里面其实很多也有用右手坐标系,这个只是根据实际应用不同,没有说哪个比较好。
现在,相信大家至少对于左手坐标系有了一个比较形象的了解了,那么这里介绍的目的也就达到了。(贴图好麻烦的,么么嗒)
2.3 认识Vector3
如果大家有心的话,会发现我们在第一篇博客里边写的代码里引用了一个Vector3的类,那么这个类是干啥用的呢?我们现在来初步了解一下。
Vector3是Unity中定义的一个含有x、y、z三个字段的类,可以表示位置点,也可以表示一个向量。
Vector3乘以数值表示对向量的三个值乘以相应的值,假设v1,v2是两个向量,则v1-v2表示从v2指向v1的向量,如下图所示。扩展:后面我们在做打箱子游戏的时候,当一个小球向指定区域发射时,就是一个向量减法的典型应用。已知小球在摄像机位置(即是一个摄像头所在的向量,假设其为v2),以及鼠标所指向的位置坐标后(即为目标地向量,假设其为v1),通过v1-v2即可得到要发射的具体方向的向量(相当于告诉小球朝哪个目标方向发射!)。
三、先学走再学飞—第二个Unity3D程序
在第一篇博客中的HelloCube程序中,我们让Cube实现了翻转。这次,我们让Cube实现前后移动,让游戏对象学会“走路”这项技能。
(1)在Hierarchy中Create一个Cube(立方体),并且加入一个Direction Light(平行光);之后,将Cube的Position属性设置为(0,0,-4),这样镜头会近一点;将Cube的Scale属性设置为(1,1,1),这样Cube会放大一点;
(2)在Project中新增一个C# Script,随便取个名字,这里取名为:CubeController。双击该脚本,在Update方法中输入以下代码:
(3)点击预览按钮:按键盘Up键,Cube会朝前移动;按Down键,Cube会往后移动;
四、案例深入:地球围绕太阳转
有了以上的基本的3D理论基础之后,我们再来做一个Unity3D小案例:地球围绕太阳转。所谓地球围绕太阳转,指的是指地球绕太阳做周期性转动。(如果你要问为什么地球围绕太阳转,请问哥白尼先生和牛顿童鞋)
(1)首先Create以下游戏对象:两个Sphere,一个Direction Light;并将其中一个Sphere命名为Earth,另一个Sphere命名为Sun;设置Sun的Scale为(3,3,3),让太阳这个大球体显得大一点;而将Earth的Position设置为(5,0,0),让Earth显示在太阳的右边;
(2)为了让太阳更像太阳一点,我们在Project中Create一个Material(材质,所谓材质就是修饰游戏对象的),命名为SunMaterial,这里主要是为太阳增加一个颜色。
选中SunMaterial,双击Main Color,弹出颜色选择器,在颜色选择器中选则一个深黄色的区域。
(3)为了让地球更像地球一点,这里我们为地球增加一个背景图片—地球贴图。(可以从网上搜索一下,也可以从本文底部给出的URL下载)下载完成之后,将地球贴图拖动到项目中,最后将贴图拖动到Earth对象上。最后效果如下图所示。
(4)新增一个C# Script,命名为EarthControl。双击该脚本文件,在编辑器中写入以下代码。这里要注意,常用的游戏对象一般设置为全局变量,并且在Start方法中进行初始化(这里是通过GameObject的Find静态方法获取,你可以理解为JavaScript的Dom操作GetElementById("Earth"))。游戏对象的transform组件用于控制物体的位置,旋转和缩放。
PS:使用RotateAround()方法,让地球始终围绕着太阳在Y轴方向旋转。参数1表示围绕旋转参照点的位置(太阳的位置),参数2表示围绕旋转的角度,Vector3.up就是表示Y轴旋转,参数3表示一次旋转的速度(long类型,越大则越快)。
(5)脚本写好之后,将该脚本拖动到Earth上进行绑定。最后,点击预览按钮,即可看到地球围绕太阳转的效果了。
五、小结
本篇主要介绍了游戏开发中的一些3D模型基础,涉及到一点中学的空间几何知识,复习一下对后续学习会有好处。后面会探索一下物理引擎和GUI,但也只是初步的。最后,仍然感谢一下参考文献的作者,站在你们的肩膀上我能看的更远,谢谢!
参考文献与资料
(2)泡泡堂,《左手坐标系和右手坐标系》:http://www.cnblogs.com/mythou/p/3327046.html
附件
学unity3d游戏开发需要了解哪些内容
unity3D是如今绝大多数游戏开发团队的首选3D引擎,并且它在2D上的表现也及为优秀。它可以轻松解决很多其它引擎不能解决的问题,此外还有很多出众的地方,这都是现在越来越多的人选择unity3d游戏开发的原因。unity3d游戏开发... 查看详情
投影方式-unity3d游戏开发培训
投影方式-Unity3D游戏开发培训 作者:邓家海2018-02-1220:33:13 摘 要 透视投影是3D渲染的基本概念,也是3D程序设计的基础。掌握透视投影的原理对于深入理解其他3D渲染管线具有重要作用。本文详细介绍了透视投... 查看详情
unity1.3unity3d游戏开发学习路线
...日期:2016-03-23一、基本思路第1步--了解编辑器首先了解unity3d的菜单,视图界面。这些是最基本的基础,可以像学word操作一样,大致能明白有几个菜单,几个基本的视图,各自起什么作用就可以了。当然还要了解人物基本的比例... 查看详情
unity3d游戏开发培训
Unity3D游戏开发培训作者:邓家海时间:2017-01-08修改:2017-01-0912:36:15 1 项目的构成 图1-1 如图1-1所示,Unity3D的项目构成主要分成三部分: Assets:资源解包,例如3D模型、2D纹... 查看详情
unity3d游戏开发学习分享之表面着色器讲解
一、三种着色器的书写格式: 1、surfaceshaders,指的是表面着色器 2、vertexandfragmentshadersand指的是顶点和片段着色器 3、fixedfunctionshaders.指固定功能着色器 二、顶点着色器与片段着色器 我们可以这么理解,在Unity... 查看详情
unity3d是啥?好学么?一般要学习那些课程啊?
...庙逃亡2》《我叫MT2》。游戏的3D时代已经来临,而市场上Unity3D的开发者却供不应求。Unity3D行业前景广泛,游戏开发,虚拟仿真,建筑,电影,动漫等多行业都在广泛运用3D技术。近年来游戏市场竞争十分激烈,各游戏公司均需... 查看详情
游戏开发 xna/unity3d
】游戏开发xna/unity3d【英文标题】:gamedevelopmentxna/unity3d【发布时间】:2011-02-1819:56:55【问题描述】:我想制作一些游戏,而不是像mmorpg这样的大游戏,像蛇和类似的游戏,也许将来我想取得进步。我在3个月前用xna构建了“pong”... 查看详情
游戏开发者眼中的unity3d网页游戏测评报告
...,能够实现3D页游的主流技术有Silverlight.XNA、Flash、HTML5和Unity3D。其中,Unity3D作为一款专注于3D游戏的浏览器插件,近期在国内外页游产品线骚动异常;本人从多方收集到可注册的Unity3D页游测试发现,当下的Unity3D技术应用尤其在... 查看详情
内置3d对象-unity3d游戏开发培训
内置3D对象-Unity3D游戏开发培训作者:邓家海2018-02-1219:21:58五大面板:-Hierachy:当前场景中的物体 图1-1 -Project:项目中的所有资源 图1-2 -Scene:当前场景的预览图 图1-3 -Inspector:属性&n... 查看详情
搭建unity3d游戏引擎开发工具系列:ui框架
搭建Unity3D游戏引擎开发工具系列:UI框架(1)搭建Unity3D游戏引擎开发工具系列:UI框架(2)搭建Unity3D游戏引擎开发工具系列:UI框架(3)搭建Unity3D游戏引擎开发工具系列:UI框架(4... 查看详情
用户输入-unity3d游戏开发培训
用户输入-Unity3D游戏开发培训 作者:邓家海时间:2018-02-1214:28:45用户输入Input鼠标按键:-方法:GetMouseButton();-方法:GetMouseButtonDown()-方法:GetMouseButtonUp()-参数为int,0表示左键,1表示右键,2表示滚轮 键盘输入-方法:GetKey()-方法... 查看详情
如何用ps制作unity3d场景资源
...布,对纹理清晰的部分进行剪裁即可。4、然后即可打开Unity3D软件,导入使用PS制作好的场景资源:”砖“。参考技术AUnity3D是一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型... 查看详情
unity3d游戏开发之换装系统的实现
换装有两种:增加式换装、更新式换装 一、增加式换装 所谓增加式换装,就是指角色模型的身体是一个完整的网格,需要更换的部分只是一个可拆卸的部件,因而换装实际上就是在特定的... 查看详情
unity3d开发2d游戏中assetbundle有啥作用
在unity3d开发2d游戏中,Assetbundle是UnityPro提供提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法使用起来很便利。在如下几个方面的作用明显: 1.预设 Assetbundle可以将Prefa... 查看详情
用unity3d开发游戏的优点有哪些
1、智能界面设计,可视化编程界面完成各种开发工作,高效脚本编辑,实现高效率开发2、面向组件开发,不同的游戏项目,整个逻辑需要用C#重新写,但是资源都是可以沿用原来项目的。3、跨平台性,只需一键即可完成作品的... 查看详情
小白学习unity3d做经典游戏坦克大战日常
...分了解Untiy3D基本游戏开发和一些小白容易疏忽的问题。Unity3D有着非常便利的管理和编码功能。现在非常热门的MOBA游戏王者荣耀,也是用Unity3D开发的呢!用其他编程语言例如:j 查看详情
使用multiplayernetworking做一个简单的多人游戏例子-2/3(unity3d开发之二十六)
猴子原创,欢迎转载。转载请注明:转载自Cocos2Der-CSDN,谢谢!原文地址:http://blog.csdn.net/cocos2der/article/details/51007512使用MultiplayerNetworking做一个简单的多人游戏例子-1/3使用MultiplayerNetworking做一个简单的多人游戏例子-2/3使用Multiplay... 查看详情
unity3d游戏开发ugui插件入门之游戏菜单
ugui是unity4.6开始加入的一个新的ui系统,非常强大,下面我们将通过一系列博客的方式一起来学习一下ugui的使用。本篇博客会介绍如何使用ugui制作一个游戏菜单,并且了解如何让物体与ugui的控件交互,效果图如下: ... 查看详情