• 作者:谭草头乙链接:...什么是游戏引擎,什么是虚幻引擎(Unreal Engin 4)?游戏引擎是由多个子系统共同构成的复杂系统,它几乎涵盖了游戏开发过程中的所有重要环节,是游戏开发的流程核心。 UE(Unreal...
    作者:谭草头乙
    链接:https://www.zhihu.com/question/52036177/answer/226200121
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    什么是游戏引擎,什么是虚幻引擎(Unreal Engin 4)?

    游戏引擎是由多个子系统共同构成的复杂系统,它几乎涵盖了游戏开发过程中的所有重要环节,是游戏开发的流程核心。 UE(Unreal Engin)是目前世界最知名授权最广的顶尖游戏引擎,占有全球商用游戏引擎80%的市场份额。自1998年正式诞生至今,经过不断的发展,虚幻引擎已经成为整个游戏界--运用范围最广,整体运用程度最高,次世代画面标准最高的一款游戏引擎。 UE4是美国Epic游戏公司研发的一款3A级次时代游戏引擎。它的前身就是大名鼎鼎的虚幻3(免费版称为UDK),许多我们耳熟能详的游戏大作,都是基于这款虚幻3引擎诞生的,例如:剑灵、鬼泣5、质量效应、战争机器、爱丽丝疯狂回归等等。   其渲染效果强大以及采用pbr物理材质系统,所以它的实时渲染的效果做好了,可以达到类似Vray静帧的效果,成为开发者最喜爱的引擎之一。

    UE4能做些什么? UE4不仅涉及主机游戏、PC游戏、手游等游戏方面,还涉及高精度模拟,战略演练,工况模拟,可视化与设计表现,无人机巡航等诸多领域。

    总而言之,行业里游戏的IP不是一款引擎能够左右的,但另一个决定性要素:画面,却必须依靠虚幻4这样过硬的引擎作为支持,这也必定是未来的发展趋势,也是如今人才缺口大的重要原因之一。

    UE4的优势

    作为后起之秀,UE4在虚拟现实游戏开发者界大出风头,其强大的开发能力和开源策略,瞬间吸引了大量VR游戏开发者的目光。目前,大量以UE4开发的VR游戏已经登陆各大平台,而VR爱好者的普遍评价都是虚幻4引擎游戏在游戏画面和沉浸体验方面要明显优于Unity3D 游戏。

    UE4画面效果完全达到3A游戏水准,光照和物理渲染即便在缩水的状况下也足以秒杀Unity蓝图系统。UE4让游戏策划不用再写劳神费力编辑代码,其强大的材质编辑器实在让开发者们大呼德玛西亚,各种官方插件齐全也让开发者不用在自编第三方插件并担心兼容接口问题。更重要的是针对虚拟现实游戏,UE4为手柄、VR控制器提供了良好支持。而UE4提供的各种游戏模版,让其与Blueprint配合做原型甚至比Unity更快。

    UE4的就业前景如何?

    去年9月份, VRSTAR发布的数据显示,全球VR从业者分布来看,美国的人才最多,占比40%,需求占全球48%;相较之下,中国的VR人才仅有2%,但是需求却占全球18%。

    需求量大,但人才短缺严重。首先熟悉UE4(虚幻引擎4)的技术很是紧缺。我们知道,VR游戏如果要很好的效果的话,基本上都会选择用UE4开发,而国内跳过了主机游戏时代,能够使用UE4的人很少,U3D的反而多些。接下来是美术,一定需要有技术美术,因为虚幻引擎是一个集成化的开发环境,内部有各种各样的编辑器,材质、粒子、关卡、动画,编译器非常多,所以需要有技术美术来做这个事情,还要关卡美术,最好具有一些技术背景,才能做起来更快更方便。最后,策划也需要完全变换思维,不能用传统的游戏设计思维是设计游戏。

    因为人才匮乏,也催生了一些专门培养VR人才的教育机构。不同课程时间和内容,不同的学费标准。学费大概在2万-2.5万之间,课程时间一般是5到6个月,如果学的好、有点基础差不多4个多月就可以就业。有些培训机构也包就业。那些零基础的从培训教育机构毕业后,有些VR开发工程师的转正后薪资在5-10k,比传统手游要高1k-2k左右。对于初入社会的就业人士来说这也是还不错的待遇。

    如果有求职者有意从事这方面的工作,不妨多了解和学习这方面的知识,武装自己。



    什么是Unity3D引擎?

    Unity是目前全国最专业的游戏引擎,能够创建实时、可视化的2D和3D动画、游戏,被誉为3D手游的传奇,Unity3D可以创建虚拟的现实空间,让你在虚拟的世界里尽情发挥,使心灵得到释放。

    游戏开发迅速崛起,发展为独具特色前景广阔的行业,市场需要Unity3D技术作为支撑的游戏,企业需要Unity3D技术开发人才。因此,Unity3D技术人才的需求量也会越来越大。

    Unity 3D是目前最火的专业游戏引擎

    Unity 引擎占据全功能游戏引擎市场45%的份额,全世界有6亿的玩家在玩使用Unity 引擎制作的游戏

    Unity 3D引擎占据全功能游戏引擎市场45%的份额,居全球首位

    Unity 3D开发人员占有比例为47%

    注册开发人员3.3M

    Unity 3D全球用户已经超过330万人,中国区的开发者数量已成为全球第一

    Unity引擎制作的游戏吸引了全球600M玩家,87亿次下

    VR开发者更爱U3D?

    U3D引擎的开发公司Unity在近日获得了DFJ Growth高达1.81亿美元的C轮领投,DFJ Growth则是知名风投公司DFJ之下的一个部门,他们曾在2014年获得了4.7亿美元的融资,公司的高管舒勒表示DFJ Growth将在未来的几年集中关注科技领域,对Unity的投资也是风投计划的一环。在获得资金之后,Unity可能将会加速U3D引擎在虚拟现实领域的布局。

    事实上,在VR相关的游戏引擎公司方面,并非只有Unity收获了融资。虚幻4引擎的开发商Epic Games曾在2012年收获了腾讯3.3亿美元的注资,而陷入危难的Crytek也在去年与亚马逊达成了战略合作,将他们的CRY引擎以5000到7000万美金的价格授权给了亚马逊,亚马逊随后则开发出了支持虚拟现实内容研发的Amazon Lumberyard。

    在这三个主流引擎之中,Unity 3D普及最广。凭借较低的技术门槛与收费,以及对跨平台的优良支持,U3D获得了一大批拥护者,今年的GOOGLE I/O大会上他们就宣布平台已经坐拥550万开发者。

    产品特点

    U3D的目标是结束诸如AutoDesk、Catia、UG、Pro-E和其它软件公司开发的专有的3D图形格式,用所有的用户都可以使用的一种标准格式来取代它。在保留绝大多数功能的前提下,无须专有程序即可打开,或在互联网进行3D视图的浏览和操作。换言之,U3D就是让3D文件能够象JPEG文件一样流行和易于使用!

    这种标准将使3D更容易结合到网络浏览器、手机浏览器等其它应用程序中,使3D图像能够更广泛地普及,从而促进对更快的处理器和图形芯片的需求。

    2005年,Adobe在业界率先发布了Acrobat 3D,即在Acrobat现有的基础上加入对3D物件的支持。从 Adobe Acrobat 7.0开始,Adobe的PDF格式支持在文档中嵌入3D内容。这些3D内容以“Universal 3D” (U3D)格式保存在PDF文件中。

    如何学习?

    第一步首先了解unity3d的菜单,视图界面。这些是最基本的基础,可以像学word操作一样,大致能明白有几个菜单,几个基本的视图,各自起什么作用的就可以了。当然还要了解人物基本的比例和结构。

    第二步理解场景里面的坐标系统,输入系统,简单的向量概念。Unity3D的坐标系统及向量概念如果不理解清楚,不理解世界坐标,局部坐标的关系,即使一个简单的移动,缩放,旋转的几行代码,也会困惑你半天。

    第三步学习创建基本的场景的一些基本概念:游戏对象,组件,脚本。在界面上分别体现在层次视图,项目视图及属性视图,要理清楚彼此之间的关系。

    第四步学习资源导入方面的一些基本元素:网格,材质,贴图,动画等。

    第五步学习脚本的生命周期,Start,UpDate,ONGUI这些基本的方法。了解,预制,时间,数学等常用的类及相关方法。理解游戏对象,组件,脚本彼此之间的关系。

    第六步进一步学习摄像机灯光,地形,渲染,粒子系统,物理系统等等,这些每一个深入进去都是一个很复杂的主题。

    第七步一些更高级的概念:向量的加减法点乘叉乘,光照法线贴图,内存管理,图形优化等等。Unity3D入门容易,真的要精通,那是相当难的。

    U3D的行业前景如何?

    Unity是当今最专业的手游开发引擎,并没有之一

     在10大游戏市场(美国、中国、韩国、日本、英国、加拿大、巴西、德国、俄罗斯语台湾)中,Unity是最为普及的开发工具。随着时代的进步,高端的主机游戏在未来一定也会出现在移动设备中。Unity引擎的规划十分符合未来的发展,这也无疑增加了众多unity青睐者的信心。

      手机游戏引导游戏产业主流的今天,大部分游戏玩家都希望能有更多更好玩的产品出现在他们眼前,广大的市场需求也导致了我国内的游戏设计、游戏开发人员极度紧缺,手游人才供不应求。

    相信手游人才必将会势为各大运营商、服务商以及开发商们相继争抢的热门对象,另外,如今我国政府也在游戏产业上的态度也是大力支持的,我国的信息产业部、国家科技部早已将游戏产业列为IT领域的重点扶持对象。

    现在最火爆的《王者荣耀》就是用Unity3D开发的,暴雪的《炉石传说》客户端也是用Unity3D开发的,《神庙逃亡》、《球球大作战》等等都是用U3D开发的。

    U3D现如今的手游市场份额已经占据到85%!同时其跨平台的优势,对于端游和页游也势不可挡!后期的体感游戏也必将是U3D的领地!现如今U3D人才稀缺,从业人员薪资高,正是进入这个朝阳行业的最佳时间!

    展开全文
  • 已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 在学习Unity引擎或者是其他3D游戏引擎时,经常遇到的...

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。

    CSDN视频网址:http://edu.csdn.net/lecturer/144

    在学习Unity引擎或者是其他3D游戏引擎时,经常遇到的问题就是各个坐标空间,在以前的博客中也给读者介绍过,本篇博客里用通俗易懂的语言再给读者揭露一下为什么需要这么多坐标空间?以及如何产生矩阵变换或者说利用矩阵变换解决问题。

    在生活中我们经常遇到问路的,有的人方向感比较强,而有的人方向感比较弱,针对这些人指路时就要注意了,方向感强的人,你可以告诉他向东走大约300米,再向北走100米,你给他说的这些就是以东南西北为坐标轴介绍的,方向感弱的人,你就不能这么说了,你只能说向向前走300米,再向左走100米,这时你使用的是以这个路人围原点的坐标空间,通过这个案例,你可以看到不同的指路方式对应的就是我们不同的坐标轴向。由此可见,我们在生活中在不同的情况下使用不同的坐标空间,这个跟游戏中使用不同的空间是类似的。

    Unity3D引擎开发3D游戏时,也会面临着各个坐标空间的变换,在这里给读者普及一下,这样开发者再做一些空间变换时更容易上手。Unity3D引擎使用的是扩展名为FBX的模型,模型的制作是美术人员用建模工具Max制作完成导出的,除了模型还包括图片,比如高光,法线等,关于材质的渲染可以使用Unity3D自带的Shader或者自己编写Shader。制作的模型相对于它自身而言就是局部空间也称为模型空间,也称为局部空间,每个模型都有自己独立的坐标空间。当它移动或者旋转时,模型空间也会跟着它移动和旋转。打个形象比喻,我们在公司的房间里面移动时,我们自身的空间也在跟着移动,当我们转身时,我们的坐标空间也在跟随变化。

    在模型制作时,美术人员会给模型一个坐标,默认的情况下都是设置成(0,0,0),这个坐标是作为父节点的坐标,模型会有自己的孩子节点,假设带有孩子节点的物体如下图所示:

    孩子节点的坐标是(2,2,0),它是子物体的局部坐标,下面会通过矩阵转换的方式,计算一下它在Unity中的世界坐标,也是高速读者如何利用矩阵变换获取到在世界空间的世界坐标。在Unity3D引擎使用的是左手坐标系也就是Z轴朝里,X轴朝右,Y轴朝上。将我们制作好的模型拖入到Unity编辑器后的效果如下所示:

    红色箭头表示的是X轴,绿色的箭头表示的是Y轴,蓝色的箭头表示的是Z轴。它在世界场景中的坐标是(0,0,0)换句话说就是它自身的局部坐标与世界坐标重合。它的孩子节点是我们上面提到过的,下面我们将模型进行位移,旋转,缩放进行操作,我们进行缩放(2,2,2),旋转(0,150,0),位移(5,0,25),在Unity的表现效果如下所示:


    我们可以构建出模型变换矩阵,在这里要注意一个问题,它们变换的顺序是一定的,不能改变。先进行缩放,在进行旋转,最后进行位移操作。相应的矩阵变换如下所示:


    接下来我们对模型的子物体进行模型变换如下:


    也就是说,在世界空间下,模型的子孩子的位置是(9,4,18.0)这样我们通过矩阵变换就得到了子孩子的世界坐标,其实这些基本运算我们在游戏开发中也是经常使用的,比如我们可以自己利用矩阵变换实现实时阴影,Unity3D自带的阴影由于消耗比较大,不容易在移动端实现,我们自己可以利用矩阵变换实现,效率得到提升。

    后面继续介绍观察空间的矩阵实现。













    展开全文
  • 基于Unity3D虚拟校园漫游系统. 虚幻4引擎专题相关参考文献。
  • 虚幻4 (UE4和Unity是目前市场上最热门的游戏引擎,也各自拥有为数众多的开发者,虽然一些大型的游戏公司仍然运用自家开发的引擎来制作游戏,但是在巨大的市场需求下,独立开发者与游戏工作室依然需要一款优秀的...

    虚幻4 (UE4) 和Unity是目前市场上最热门的游戏引擎,也各自拥有为数众多的开发者,虽然一些大型的游戏公司仍然运用自家开发的引擎来制作游戏,但是在巨大的市场需求下,独立开发者与游戏工作室依然需要一款优秀的引擎来支持项目的开发。

    了解游戏的开发类型

    首先需要了解的是,我们打算用游戏引擎来做什么,还有就是开发哪一类型的游戏,是2D还是3D形态? 是跑酷还是射击类?是准备将游戏做出来发布在浏览器还是手机? 对游戏如何获利是否已经有想法或是计划? 是通过哪种方式收费?广告置入还是道具购买?

    明确以上的这些问题后才能让我们决定使用虚幻4还是Unity,而这两个引擎一定都可满足我们的需求,差别就在于哪一个引擎在我们开发过程中所带来的效益最高。

    以国内目前的市场来看,采用Unity来开发手机游戏似乎是很理想的选择,不论是3D或是2D类型的游戏,Unity提供的功能已经能帮助开发者快速的制作出一款精美的手游。而虚幻4最近开始强化的2D图像与手机发布功能,似乎也让不少的开发者跃跃欲试。

    如果我们想要创建的是一款3D游戏,那么使用Unity是不错的选择,在图像的呈现上面,Unity与虚幻4本来就不是同一个等级,如果在我们的游戏中并不需要表现出次时代画质的效果,那么Unity确实已经能符合我们的需求。

    另外就是对于虚拟现实与导览项目的应用,现在国内外已经有不少的设计院采用游戏引擎来制作交互形态的展示,例如在iPad上面使用触控方式来表现建筑景观,或是在科博馆里面以互动效果来达到教育与各种视觉模拟。

    价格部分

     

    制作游戏的类型将决定了使用哪一款游戏引擎,另外就是发布平台的选择也是一个决定的因素,而准备投入的预算则是牵动了最终的决定。

    如果你现在是很有理想,有抱负的一个开发者,手上并没有太多的预算,那么游戏引擎的授权费就是一个考虑的重点了,尤其是在游戏正式面向市场时,版权的费用一定是要列入计算的。

    Unity 提供了免费版让我们使用,不过与Pro版本比较起来,免费版更适合刚接触游戏开发的用户,也就是我们所说的入门版本,如果要直接使用Unity Pro的版本,代价是1500美元,或是支付每个月75美元,即可获得完整的软件授权。

    而虚幻4没有 Pro 或免费版的区分,只要月付19美元即可获得这个游戏引擎的所有东西,

    这个价格看起来是比Unity Pro有更大的优势,但是有一个前提,就是虚化的开发商将在我们的获利中抽取5%的费用,不管这个游戏是用何种方式来跟用户收费,所以这个地方也是开发者需要特别注意的。

    那么有人问到,如果停止支付19美元的后果是什么?这个就简单了,停止支付的结果就是无法升级到最新的版本,而我们也注意到了,从虚幻4.0发布以来,更新的脚本非常的快速,目前已经到了4.5的版本,而Unity从2012年底发布了4.0之后,目前还停留在4.5.x的版本。

    虚幻4还有一个优势,在大学或是学术单位是可以免费使用虚幻4来做课业还是毕展,学生也可以用来制作与发布自己的游戏,当然了,开发商还是需要收取这5%的费用,相对之下,虚幻4似乎更容易在校园内推广。

    编程部分

    以现在资讯发达的程度来看,开发游戏已经不是什么惊天的技术或是啥秘密了,除了引擎价格与开发项目类型的考量,游戏引擎采用的编程方式也影响了我们的最终决定。

    虚幻4采用C++的开发语言,而Unity使用C#与JavaScript,我们可以依照个人的能力与喜好来决定采用虚幻4或是Unity,虽然说有的人觉得C++已经过时了,但还是有不少的开发者偏好使用此一编程技术,如果我们擅长的语言是C#,那么投入Unity的怀抱是毋庸置疑的选择。

    虚幻4现在提供一个可视化的脚本功能与Unity插件Playmaker、uScripts非常的相似,这种可视化工具的好处就是让美术人员可以在不用编写代码的情况下来完成游戏,只不过在国内市场对这类型的开发方式并不是有太高的认同度,大多数的情况下是将可视化工具用在虚拟现实的项目演示上面多些。

    而虚幻4的可视化脚本有先天上的条件限制,如果是初学者来使用就很适合,或是用来做建筑导览,虚幻4的图像表现绝对是高于Unity,而实际上现在已经有许多高品质的室内外效果展示皆出自虚幻4。

    资源商店

    虚幻4与Unity都有专属的资源商店,我们可以在商店里面付费下载各种游戏开发用的资源,例如角色模型,场景,道具,GUI,特效与个类型的音效,而Unity提供的资源类型种类齐全,也是目前国内开发者经常去“淘资源”的地方,也有许多开发者制作插件与模型在商店进行销售,所以在资源提供的部分,Unity明显的要优于虚幻4。

    图形能力

    在图像的表现上面,虚幻4的确已经建立一个超高的标准,也符合大家对3A级游戏的定义,从复杂的粒子模拟效果与先进的动态照明技术,虚幻4带给开发者一个全新的开发平台,当然,对于即将发布的Unity 5.0版本,诸多开发者也是翘首以盼,希望Unity的新版本在某些效果的呈现上能与虚幻4并驾齐驱。

    图像的能力虽然不能代表一切,毕竟以现在的游戏市场来说,有创意性的游戏往往更能吸引用户的关注,尤其是以手游市场的整体效益来看,小而精致的游戏确实比起一些游戏大作更受到玩家的喜爱。

    哪一个更容易上手?

    在一些论坛里面多数人讨论的一个话题是,到底是虚幻4好上手还是Unity更利于开发? 其实讨论这个主题的意义不大,Unity在国内的使用人口与学习资源皆高于虚幻引擎,市场上招聘的开发人员也多以Unity为主,所以我们认为讨论这个主题必须根据区域的情况来做为前提,例如有人学了虚幻后,发现市场的需求与机会不是很多,那是不是意味着必须放弃虚幻来学习Unity?

    如果不考虑太多的前提,只是想知道哪一个引擎更适合自己的话,最简单的方法就是直接拿一个项目来做练习,分别将项目导入虚幻4与Unity,在实施过程中就会发现到许多的问题,这时就能根据自己的解决能力与手上的资源来判断哪一个引擎更适合自己。

    更多unity2018的功能介绍请到paws3d爪爪学院查找。链接https://www.paws3d.com/,也可以加入unity学习讨论群935714213

    近期更有资深开发人士直播分享unity开发经验,详情请进入官网或加入QQ群了解

    展开全文
  • 我一直向所有想做游戏的朋友推荐Unity3D,为什么呢?首先是因为专业,Unity3D非常强大,用它创建一个类似MiniGore这样的3D平面射击游戏简直轻而易举,而就连使命召唤这样的大型3d游戏,如果素材得当也不在话下。二是...

    转自:http://blog.sina.com.cn/s/blog_7c336a8301013son.html

    我一直向所有想做游戏的朋友推荐Unity3D,为什么呢?首先是因为专业,Unity3D非常强大,用它创建一个类似MiniGore这样的3D平面射击游戏简直轻而易举,而就连使命召唤这样的大型3d游戏,如果素材得当也不在话下。二是因为易用,他的操作非常容易,而使用的脚本语言又是JavaScript或者C#,不仅非常简单,也让各个种类的程序员都非常容易上手。再次,就是因为免费,如果你不使用Pro或者Mobile的内容的话,Unity3d就是完全免费的。还有就是对3D模型的兼容性,几乎任何3d模型都可以导入到unity中,可以说是一个很方便的特性。

     

    今天,我就来讲讲Unity3D的基础操作,这可以说是一个新手必读吧,读完之后,你一定会惊叹,原来做一个游戏这么简单。

     

    第一节 加入重力

     

    我们先打开Unity3d,新建一个场景(Scene),新建的时候应该会有对话框要求你加入哪些Asset Package,记得选择Physics Material,因为后面我们一定要用的哦亲。

     

    如果创建的时候没加,你可以再后来的Asset菜单里加:

     


     

    之后,我们建立一个Cude,调整一下x和z的大小,我这里调成了25,让它变成一个地板,你也可以放一个texture上去,看起来更加真实,我这里从简,再创建一个sphere,在component中选择Physics中的RigidBody,前提是选中你的sphere物体,之后会看到这个Sphere的inpector中加入一个component叫做RigidBody,调整好Camera运行一下,你就会发现Sphere受到重力的影响自动掉落到地板上。

     


     

    之后,通过我们之前引入的Physics Materials资源包,你还可以选择这个物体的物理性质,我这里选择Bouncy(跳跳),落下之后,这个物体就会蹦来蹦去的,呵呵

     


     

     

    第二节 检测碰撞

     

    下面我们通过简单的JavaScript语句来检测碰撞,这在制作游戏中是很有用的,比如说检测到子弹和敌人的碰撞之后,可以使用我们后来要讲到destory命令消灭敌人。

     

    这次我们新建一个Terrain项目,在用Grass贴图来覆盖住它,如果你找不到贴图的话,记得在Asset菜单里找找,看看哪些资源你还没有引入进去。

     


    然后再加入一个Cube项目,我这里叫做PlayerCube,为他加上重力,之后选择bouncy性质,然后我们再新建一个Cude,调整y和z的值让他变成一堵墙,放置好,命名为Wall,别忘了给Terrain改名为Terrain,

     

    之后我们在Asset菜单中建立一个JavaScript项目,改名为CollisionDetect,双击打开,如果你使用的是Unity 3.5的话,就会打开MonoDev,这是一个新工具还是很好用的,在其中新建一个函数,别管Start和Update函数,我们待会会讲。

     

    加入以下代码:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    function OnCollisionEnter(theCollision : Collision){
    
     
    
    if(theCollision.gameObject.name=="Terrain"){
    
     
    
    Debug.Log("Hit terrain");
    
     
    
    }else if(theCollision.gameObject.name=="Wall"){
    
     
    
    Debug.Log("Hit the wall");
    
     
    
    }
    
     
    
    }
    

     

    如果看不懂这些代码的话,也没关系,JavaScript是最好学的编程语言,Google一下吧,保存这个JS文件,然后拖到我们的PlayerCube上。

     


    这时候我们运行,就会看到PlayerCube到处蹦,碰到Terrain的时候,控制台就会显示Hit Terrain,碰到wall的时候就会显示Hit the wall。

     

    第三节  检测用户输入

     

    下面我们来讲一下如何检测用户的键盘和鼠标的操作。

     

    就用我们上次的那个场景,这次我们给PlayerCube加上我们可以控制的动作。就是通过“wasd”或者上下左右键来控制移动。

     

    请注意,如果要使用这里使用的方法来控制移动,那么所控制的物体不能够是一个物理世界的物体,也就是说你要把RigidBody这个component删掉,如果你想要在物理世界里移动物体的话,你就需要我们在下面会讲到的力(force)。

     

    首先我们新建一个JavaScript文件,这里命名为InputDetect吧,输入下面的代码:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    
    #pragma strict
    
     
    
    var Player : GameObject;
    
     
    
    function Start () {
    
     
    
    }
    
     
    
    function Update () {
    
     
    
    Player = GameObject.Find("PlayerCube");
    
     
    
    if(Input.GetKey(KeyCode.W)){
    
     
    
    Debug.Log("Hit w");
    
     
    
    Player.transform.Translate(Vector3.forward * 2);
    
     
    
    }else if(Input.GetKey(KeyCode.S)){
    
     
    
    Debug.Log("Hit s");
    
     
    
    Player.transform.Translate(Vector3.back * 2);
    
     
    
    }else if(Input.GetKey(KeyCode.A)){
    
     
    
    Debug.Log("Hit a");
    
     
    
    Player.transform.Translate(Vector3.left * 2);
    
     
    
    }else if(Input.GetKey(KeyCode.D)){
    
     
    
    Debug.Log("Hit d");
    
     
    
    Player.transform.Translate(Vector3.right * 2);
    
     
    
    }
    
     
    
     
    
    }
    

     

    这时,我们运行这个游戏,就可以通过“WASD”来控制PlayerCube的移动了。

     


     

    第四节 使用Prefab复制和控制物体

     

    我们可以直接把Prefab看做是个妈,她能生好多小孩,如果妈妈的DNA变了,小孩的跟着变,就是说你可以用Prefab创建物体,然后通过这个Prefab修改所有这类物体的性质,这对于批量生成的敌人或者NPC来说很有用。

     

    首先,先创建一个Prefab,我这里命名为“Mother”,之后新建一个Sphere物体,当然你也可以建一些其他的物体,之后给这个Sphere加上你想要的性质,我加入了RigidBody和Bouncy,之后将Sphere拖到Mother上,你会发现mother变蓝了,之后你就可以随意拖一些mother物体到屏幕上去,你会发现所有的Prefab创建出的物体在清单上都是蓝色的,说明他们都有共同的性质。

     


     

    当然,作用于一个Prefab上的脚本也会作用到它的子物体上去。

     

    第五节 使用Destroy命令消灭物体

     

    我们游戏中怎么能够没有敌人呢?有敌人就得能够消灭他们,这时候,我们就会使用Destroy命令了。

     

    在这里,我们使用上次Mother生出来的小球球作为敌银,一旦我们的PlayerCube碰撞到了小球的话,就是用Destroy让小球消失。

     

    新建一个JavaScript脚本,输入以下代码:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    
    #pragma strict
    
     
    
    var mother : GameObject;
    
     
    
    function Start () {
    
     
    
    }
    
     
    
    function Update () {
    
     
    
    }
    
     
    
    function OnCollisionEnter(theCollision : Collision){
    
     
    
    mother = GameObject.Find("Mother");
    
     
    
    if(theCollision.gameObject.name=="Mother"){
    
     
    
    Debug.Log("Hit mother");
    
     
    
    Destroy(mother);
    
     
    
    }
    
     
    
    }
    

     

    这段代码很好懂吧,就是检验碰撞,然后销毁碰撞到的Mother物体,别忘了把Destroy的JavaScript文件拖到PlayerCube上去。运行一下,就可以看到碰撞到的物体都被消灭了。

     


     

    第六节 使用Instantiate命令创造物体

     

    我们直接在界面创造的物体都只是会在界面被初始化的时候加载,那么,如果为了节约内存或者其他什么事情,我想要在游戏过程中添加物体,那该怎么办呢?你猜对了,就是用instantiate命令。

     

    这个命令就是英文实例化的意思,下面我们给碰撞之后消失的mother物体继续初始化一些,也就是说消灭了一些,又来了一大波···

     

    为什么非要用mother呢?因为只有拥有Prefab的物体才能够使用这个命令哦亲。

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    function Update () {
    
     
    
    var instance : GameObject = Instantiate (PreFab,transform.position,transform.rotation);
    
     
    
    }
    

     

    注意:这样的话,每次刷新一帧都会出现一个新的mother物体,你的内存也许会受不了哦,更合理的方法是按下空格键,然后出现一个新的物体,你可以自己做吗?试试看

     

    你可能已经注意到了,每一个初始化的脚本都会默认有两个函数,就是:

    Update()函数 —— 每刷新一帧都会检查并执行

    Start()函数 —— 只在场景初始化的时候执行

     

    第七节 使用Timer计时器

     

    这次,我们要让一个计时器倒数,倒数到0的时候创建一个mother物体,来看Javascript代码吧:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
    #pragma strict
    
     
    
    var myTimer : float = 5.0;
    
     
    
    function Start () {
    
     
    
    }
    
     
    
    function Update () {
    
     
    
    if (myTimer >= 0){
    
    myTimer -= Time.deltaTime;
    
    guiText.text=(""+myTimer);
    
    }
    
     
    
    if (myTimer <= 0){
    
    guiText.text = ("Done");
    
    }
    
     
    
    }
    

     

    把这个脚本拖到GUItext控件上,你会发现我们所期待的效果。

     


     

    第八节 让物体动起来

     

    其实让物体行动的技巧,我们已经会了,不是吗?

     

    如果你觉得不是的话,没有认真的看上面的文章哦,我就再给你讲一次吧。

     

    请特别注意,这种方法不适合物理世界的物体,如果向移动物理世界的物体,请看下一节:

     

    创建一个Cylinder物体,之后将下面的脚本附着在上面。

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    #pragma strict
    
     
    
    var myObject : GameObject;
    
     
    
    function Start () {
    
     
    
    }
    
     
    
    function Update () {
    
     
    
    myObject.gameObject.Find("Cylinder");
    
    myObject.transform.Translate(Vector3(0,0,1));
    
     
    
    }
    

     

    第九节 使用物理世界的力

     

    这里是我们讲移动物体的重点,因为大部分的物体移动都是在物理世界完成的,而如果想要在物理世界移动东西,除了position和rotation的移动之外,就是使用“力”了,在高中学过经典物理学的人都知道,要使物体用移动,木有力是不行的,那么我们就开始吧,再新建一个什么物体,我新建了一个Capsule。

     

    之后,我会在这个物体的上方加一个力,让它用力的向下飞,触碰到地之后,通过bouncy这个性质再弹回来。新建一个JavaScript文件,就叫做Force吧,加入如下代码:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    #pragma strict
    
     
    
    var Power : float = 500.0;
    
     
    
    function Start () {
    
     
    
    rigidbody.AddForce(Vector3(0,Power,0));
    
     
    
    }
    
     
    
    function Update () {
    
     
    
    }
    

     

    运行之后,会发现capsule其实是个很有幽默感的物体。

     


     

    第十节 使用贴图和材质

     

    贴图和材质能够使你的虚拟3D世界看起来更加真实,不幸的是,需要大量在PS和AI中的设计工作,最近我一想到要打开PS就有点烦···呜呜。

     

    闲话少说,我已经做好了一个贴图,怎么使用在材质上呢?之后我们怎么才能通过材质使用到其他物体之上呢?

     


     

    就像你看到的一样,我是直接拖进去的···

     

    之后我们从新建菜单中选择Material这一项,之后选中material,将贴图拖进material的贴图选框里,之后,就可以拖动这个Material赋给任何物体了。

     


     

    第十一节 使用声效和音乐

     

    音效和音乐对于一个游戏来说是非常重要的,一个寂静无声的世界是无聊的,而且不真实,什么?你说声效和音乐是一个东西?那你就错了,声效是,比如说发射子弹的声音,什么东西爆炸的声音等等,而音乐则是背景音乐什么的,不一样的亲。

     

    对于音乐来说,往往使用立体声音乐,而对于生效来说,我们随便使用一个简单的音乐文件就可以了。

     

    想要在Unity3D中播放音乐,你需要两样东西,一个是监听器,一个是音乐源,监听器是Camera的一个组件,所以你不用担心,你唯一需要增加的就是音乐源。

     

    直接将项目中的音乐拖放到Audio Source项就可以播放,但是如果我们想要在某个特定的点上 播放音乐该怎么办呢?答案就是,写一个脚本,新建一个脚本,输入如下代码:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    #pragma strict
    
     
    
    var myClip : AudioClip;
    
     
    
    function Start () {
    
     
    
    AudioSource.PlayClipAtPoint(myClip,transform.position);
    
     
    
    }
    
     
    
    function Update () {
    
     
    
    }
    

     

    之后将这个脚本拖放到我们的物体上,最后,将音频文件拖放到AudioSource选项框中。

     

    第十二节 使用关节

     

    关节在3D游戏之中的应用非常广,主要在于物理世界的重力影响,下面我们就通过关节来制作一个钟摆。

     

    这次我们新建一个场景,松了一口气?刚才的场景是不是太乱了?你做的时候可以整理一下嘛,呵呵

     

    新建一个cube作为地面,之后一个cube放在上空作为摆垂,之后用几个capsule分别用component中的fixed joint连接起来,之后最上面的那个capsule与世界相连,使用Hinge Joint,这样的话,他会默认与世界相连,不用担心,看图

     


     


    第十三节 使用Axes

     

    在Edit – Project Setting – input 中可以查看各种形式的input,这些input方法在unity中被叫做Axes。

     

    我们创建一个JavaScript,叫做GetAxes,输入以下内容:

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
    #pragma strict
    
     
    
    function Start () {
    
     
    
    }
    
     
    
    function Update () {
    
     
    
    var Honriz : float = Input.GetAxis("Honrizontal");
    
     
    
    Debug.Log(Honriz);
    
     
    
    }
    

     

    在拖放脚本之后,运行这个场景,看看控制台输出了什么,你就明白了。

     


     

    第十四节 使用触发器

     

    触发器一般用于检测一个物体是否处于一个空间内,他是怎么做到的呢?

     

    首先,他创造一个大的物体,之后将他的randerer属性去掉,他就隐形了,这样,我们再把他的isCollide属性去掉,他就不会发生碰撞了,之后,我们只需要用脚本检测物体是否与这个物体碰撞就可以了。

     

    我们新建一个场景,做一个地板,再做一个底座,叠加起来,再在他们的上空做一个方块,设置rigidbody属性,将底座设置成为我们刚才说的那种隐形的状态,之后新建一个JavaScript脚本,输入代码

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    
    #pragma strict
    
     
    
    function Start () {
    
     
    
    }
    
     
    
    function Update () {
    
     
    
    }
    
     
    
    function OnTriggerEnter (myTrigger : Collider) {
    
     
    
    if(myTrigger.gameObject.name == "box"){
    
    Debug.Log("Hit");
    
    }
    
     
    
    }
    

     

    按下运行,会发现可以检测出Hit。

     


     

    第十五节 使用GUI

     

    其实我们已经学过了如何使用GUI text,不信,我们就用屏幕上的字代替我们在上面的程序中的Debug.Log现实的内容。

     

    你自己能做吗?

     

    试试看吧,一个下午写了这么多,有点累。

     

    一定要在Unity中加入一个GUI Text,运行一下,就会发现屏幕上的GUI Text会随着你设定的的内容而变化了。

     


    之后看些什么?

     

    本教程的所有代码在Unity3D 3.5 F5 + Mac OS X Lion上测试可用。

     

    欢迎关注我的围脖: @Oratis

    在知乎和豆瓣上,我的名字也是Oratis

     

    我会把之后发表的教程分享到这些社交网络中。

     

    如果你有任何问题,欢迎在底下留言,也欢迎写信给我,我的邮箱地址是: oratis@appkon.com


    展开全文
  • 在游戏开发者制作游戏时,面对都是免费、都支持各大平台的UE4和Unity 3D,选择何种游戏引擎,似乎有点难以抉择,左手UE4,右手Unity 3D。今天本文为大家做一点详细分析,希望能为大家带来一些启发。 Unity 3D ...

    虚拟现实大热的今天,开发者界也出现了“甜豆花”与“咸豆花”之争。在游戏开发者制作游戏时,面对都是免费、都支持各大平台的UE4和Unity 3D,选择何种游戏引擎,似乎有点难以抉择,左手UE4,右手Unity 3D。今天本文为大家做一点详细分析,希望能为大家带来一些启发。

    Unity 3D

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity利用交互的图型化开发环境为首要方式,其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。

    Unity 3D的优势

    虚拟现实游戏开发者的轻量级工具,目前虚拟现实游戏开发者的首选游戏引擎。时下大部分的VR游戏开发者都是从原Unity 3D开发者转型而来,由于能够快速上手,在VR方面的学习成本比较低,因而受到了广大开发者的热捧。

    Unity 3D安装、调试和打包方便,配置VR项目十分简单,文档完善。Unity3D配套了很多东西供开发者使用,基本可以靠Marketplace买来的东西搭建原型,甚至某些最终业务的核心组件也可以用买来的东西,极大的降低了开发成本。比如你可以把整个Material换成Alloy、用Ngui替代UI系统,如果你要做个赛车游戏,你能找到从模型、音效、材质,到控制系统等一切。

    Unity 3D的劣势

    内建工具不够完善,渲染差,光照系统糟糕,阴影Bake有Bug,只能勉强达到2A游戏入门水平对于控制器支持较差,一些如手柄震动、VR控制器空间定位的功能引擎未集成,需要第三方插件或额外代码没有材质编辑器,需要第三方插件,Prefab不支持继承,没有内建的Level Stream支持。

    Unity 3D最大的问题都不在于以上,而在于官方对于开发者的技术支持不够。有开发者网友表示,曾经在VR Demo上进行一项底层优化时,在缺少渲染使用的关键数据时,向官方寻求技术支持,结果一个“没有这样的接口”就被打发了。对开发者而言,这可不是什么好消息。

    Unreal Engine 4

    UE4是由全球顶级游戏EPIC公司虚幻引擎的最新版本,EPIC中国唯一授权机构GA游戏教育基地。UE4支持DirectX 11、物理引擎PhysX、APEX和NVIDIA 3D技术,以打造非常逼真的画面。UE4是一个面向虚拟现实游戏开发、主机平台游戏开发和DirectX 11个人电脑游戏开发的完整开发平台,提供了游戏开发者需要的大量的核心技术、数据生成工具和基础支持。登陆设备包括PC,主机,手机和掌机。

    UE4的优势

    作为后起之秀,UE4在虚拟现实VR游戏开发者界大出风头,其强大的开发能力和开源策略,瞬间吸引了大量VR游戏开发者的目光。目前,大量以UE4开发的VR游戏已经登陆各大平台,而VR爱好者的普遍评价都是虚幻4引擎游戏在游戏画面和沉浸体验方面要明显优于Unity3D 游戏。

    UE4画面效果完全达到3A游戏水准,光照和物理渲染即便在缩水的状况下也足以秒杀Unity蓝图系统。UE4让游戏策划不用再写劳神费力编辑代码,其强大的材质编辑器实在让开发者们大呼德玛西亚,各种官方插件齐全也让开发者不用在自编第三方插件并担心兼容接口问题。更重要的是针对虚拟现实游戏,UE4为手柄、VR控制器提供了良好支持。而UE4提供的各种游戏模版,让其与Blueprint配合做原型甚至比Unity更快。

    UE4的劣势

    C++语言是第一个令众多开发者头痛的东西。对于主机平台的支持不够,开发PS4游戏需要重新编译引擎,光拉代码就需要至少一个小时,使用12核服务器,24线程同时编译都需要二三十分钟,创建新项目大概又要编译十多分钟。如果切换平台,要编译几千到上万个Shader,安装、调试和打包不方便,需要的时间明显超过Unity很多。

     

    同样,UE4最大的问题也不在以上,而在于学习成本高。UE4现有的虚拟现实游戏开发者中普及度并不高,开发者对于这款引擎的了解程度和使用经验明显不够。UE4各子模块虽然功能强大,但操作复杂,部分功能甚至没有任何文档,已有文档的功能文档同样不够完善,加大增加了开发者的学习难度,影响开发者的使用体验。UE4开发成本高是出了名的,某国内3A团队做了个10分钟的VR Demo,一千多万眨眨眼就烧掉了。UI设计器非常之难用,VR下的一些best practice也缺乏文档和例子,给人的感觉就是UE4在和开发者以期摸石头过河,明显不能让开发者省心。

     

    更多unity2018的功能介绍请到paws3d学习中心查找。链接https://www.paws3d.com/learn/,也可以加入unity学习讨论群935714213

    展开全文
  • 虚幻4 (UE4和Unity是目前市场上最热门的游戏引擎,也各自拥有为数众多的开发者,虽然一些大型的游戏公司仍然运用自家开发的引擎来制作游戏,但是在巨大的市场需求下,独立开发者与游戏工作室依然需要一款优秀的...
  •  VR浪潮席卷而来,相对于...目前虚拟现实游戏开发引擎有很多种,其中两大主流的引擎Unity和Unreal Engine,目前这两种引擎支持最大VR平台,如Oculus Rift、HTC Vive、Gear VRPlaystation VR等。本文将解析Unre
  • Unity3d:https://unity3d.com/cn 参考百度百科:https://baike.baidu.com/item/Unity3D/3064002?fromtitle=Unity&amp;fromid=10793&amp;fr=aladdin Unity3D是由Unity Technologies开发的一个让玩家轻松创建...
  • Unity3D学习笔记(2)Unity3D与3DMax结合开发注意事项 单位:比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,程序的导入单位一致,即便到程序...
  • 一个解释使用Unity3d游戏引擎开发虚拟场景漫游的教程。
  • 对象:对象直接出现在游戏场景中,是资源整合的具体表现,对象一般有玩家,敌人,游戏场景,摄像机等虚拟父类,这些父类没有实例化,而他们的子类实例化并包含了这些游戏对象,我们可以对这些对象进行操作。...
  • 可以用于制作第一人称射击游戏的游戏引擎有很多,Unity3D游戏引擎便是其中之一。Unity3D游戏引擎拥有完善的角色控制机制,可以编辑游戏的脚本语言有C#脚本语言,Javascript脚本语言等等。  游戏逻辑是通过C#脚本...
  • 随着移动互联网的发展,移动端游戏日益盛行,据了解,Unity全球开发者超过300万,1/4在中国,超过5000家游戏公司工作室在使用Unity3D开发。学习Unity3D游戏开发,未来职业发展前景非常可观。Unity 3D是什么?Unity ...
  • 虚幻4 (UE4和Unity是目前市场上最热门的游戏引擎,也各自拥有为数众多的开发者,虽然一些大型的游戏公司仍然运用自家开发的引擎来制作游戏,但是在巨大的市场需求下,独立开发者与游戏工作室依然需要一款优
  • Unity3D平台AR与VR开发快速上手》针对没有编程经验的初学者,通过详细的讲解,《Unity3D平台AR与VR开发快速上手》将Unity3D开发增强现实和虚拟现实的方法介绍给读者,《Unity3D平台AR与VR开发快速上手》使读者能够...
1 2 3 4 5 ... 20
收藏数 2,881
精华内容 1,152