Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

时间:2022-12-14 19:03:59

一、Unity3D平台简介

  Unity是由Unity Technologies开发的一个让轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、Windows Phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac 和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  据不完全统计,目前国内有80%的Android、Iphone手机游戏使用Unity3D进行开发,比如著名的手机游戏《神庙逃亡》就是使用Unity3D开发的,也有《纵横时空》、《将魂三国》、《争锋online》、《萌战记》、《绝代双骄》、《蒸汽之城》、《星际陆战队》、《新仙剑奇侠传Online》、《武士复仇2》、《UDog》等上百款网页游戏都是使用Unity3d开发。

Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  当然,Unity3D不仅只限于游戏行业,在虚拟现实、工程模拟、3D设计等应用方面也有着广泛的应用,国内使用Unity3D进行虚拟仿真教学平台、房地产3维展示等项目开发的公司非常多,比如绿地地产、保利地产、中海地产、招商地产等大型的房地产公司的三维数字楼盘展示系统很多都是使用Unity3D进行开发。比如《Miya家装》、《飞思翼家装设计》、《状元府楼盘展示》等等。

  赤果果的数据->国内53.1%的人使用Unity3D进行游戏开发,有80%的手机游戏使用Unity3D开发,跨多平台(IOS、Android、Windows
Phone、Windows、Flash、XBOX360、PS3、Wii等)游戏引擎,可以开发2D、2.5D、3D游戏。appstore手机上有1500+款用Unity3D开发的游戏,而Unity3D语言就有C#(还有JavaScript,但不是原生的JavaScript)。

  因此,对于我们.NET程序员,如果说Mono让我们进入了跨平台服务器的Web开发时代,Unity3D则让我们赶上了移动手游开发的浪潮,不至于掉队甚至错过这波浪潮。我又想起园子里的一位大牛—张善友先生写的一篇博文的标题:现在是C#程序员最好的时代。是啊,感谢开源社区的大牛们,我们拥抱着Mono,还迎来了Unity3DUnity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

二、Unity3D IDE简介

  Unity(http://unity3d.com/)提供了免费的下载,目前最新版本是4.3.4f3,安装包大概1个G左右。目前提供了收费的专业版和免费的版本以及30天的试用版,一般我们学习者使用免费版足矣。当然,在大天朝各种破解补丁、注册机是可以找到的,不过涉及到版权问题这里不进行讨论,请自行百度或Google搜索。下载完成后,即可安装,安装步凑就是各种下一步(Next),中途会提示你是否需要安装几个组件:Examples、Web Player以及Mono Developer,一般都全选上,当然也可以不选。Mono Developer是个好东西(但是智能性上赶不上强大的VS),推荐装上。Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  安装完成并且注册(或者破解)之后,你就可以进入以下所示的界面了。恭喜你,你已经进入Unity3D的学习征途,当然,还仅仅是第一步。这里需要提示一下:在新建Unity3D项目的时候,一定要放在非中文命名的路径中!另外,每次在创建新项目的时候,Unity3D都会自己重启一下,这是正常现象哈,不要以为你的Unity3D安装没成功。

Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

三、第一个Unity3D程序-Hello Cube!

  (1)在模型对象区域中的Hierarchy中Create一个Cube立方体,在Inspector中修改它的Position XYZ均设置为0;

  (2)Unity3D场景默认是木有光照源的,因此需要在Hierarchy中Create一个Directional light(平行光);Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (3)修改Main Camera(摄像机看到的就是屏幕看到的)的Position为(0,1,-5),这样看起来清楚一点;

  (4)在项目资源管理器中Create一个C# Script,命名为CubeControl。创建完成之后,双击该脚本文件,自动进入MonoDeveloper(默认是MonoDeveloper,当然我们也可以使用Visual Studio作为默认编辑器)。 

Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (5)在MonoDeveloper中,写入以下代码。这个代码主要是判断用户的按键操作,如果是上、下、左、右操作,则对指定的对象进行指定方向的翻看。(主要写在Update方法中,程序的每一帧都会调用Update方法,1秒默认30帧

 using UnityEngine;
using System.Collections; public class CubeControl : MonoBehaviour { // Use this for initialization
// Unity3D中常用的几种系统自调用的重要方法
// 首先,我们有必要说明一下他们的执行顺序:
// Awake--Start--Update--Fixedupdate--Lateupdate--OnGUI--Reset--onDisable--onDestory
// Start仅在Update函数第一次被调用前调用
void Start () { } // Update is called once per frame
void Update () {
//按键盘上的上下左右键可以翻看模型的各个面[模型旋转]
// 上
if(Input.GetKey(KeyCode.UpArrow))
{
transform.Rotate(Vector3.right*Time.deltaTime*);
}
// 下
if(Input.GetKey(KeyCode.DownArrow))
{
transform.Rotate(Vector3.left*Time.deltaTime*);
}
// 左
if(Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.up*Time.deltaTime*);
}
// 右
if(Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.down*Time.deltaTime*);
}
}

  (6)将保存后的CubeControl通过鼠标拖动到模型对象区Hierarchy中的Cube上进行脚本绑定。绑定脚本和对象之后,在Cube的属性中会看到下图所示。*PS:脚本需要对应到一个具体的游戏对象才有意义!

Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (7)现在可以预览一下我们的第一个程序了,点击如下图所示的播放按钮,即可进入模拟器看到效果。这时,我们通过按下键盘中的上、下、左、右键,Cube立方体会随着我们的按键翻转。怎样?麻雀虽小,但是五脏俱全吧,我们的第一个Unity3D程序—Hello Cube就完成了。Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (8)接下来,如果按照正式项目的步凑的话就轮到发布程序了。这里我们可以体验一下Unity3D强大的跨平台能力,我们这个Demo可以发布为各种主流类型操作系统兼容的应用程序。通过点击File-Build Settings,即可进入如下图所示的发布设置窗口界面。查看Platform列表,里边囊括了几乎目前所有的操作平台,也就是说我们可以实现一次开发,多平台运行,爽哉!Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (9)这里我们做个测试,发布一个Windows平台的典型exe程序和一个Web平台的Flash程序来体验一下。(我的笔记本没有安装Android模拟器,更不要说Mac模拟器了,所以,你懂的)Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (10)足够细心的你相信已经发现这个Cube立方体的棱角有锯齿,这是因为在默认环境下,抗锯齿这个属性是设为Disabled(禁用)的。因此,我们可以点击Edit→Project Settings→Quality,将Anti Aliasing这个属性选为2x Multi Sampling(可选值为2x Multi Sampling、4x Multi Sampling以及8x Multi Sampling,值越大越平滑,但是会占用更多的系统资源,开发调试阶段一般选择为Disabled,当然,如果你的机器足够好,选择4x或8x也是一个不错的选择)。Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

四、原谅我是“外貌”协会—酷炫场景导入

  相信大家都玩过很多游戏,对于游戏中那些宏大逼真的游戏场景应该是历历在目。所以,对于我们这种对于游戏场景外貌要求比较高的“玩家”(不过,我很少玩网络游戏,目前一直在玩的只有Pro Evolution Soccer实况足球),上面那个一点场景都木有的游戏对我们来说没有一点吸引力!因此,对于外貌协会的挑剔客观,Unity3D支持3Ds Max的FBX模型文件直接导入,为我们的游戏“整容”,一秒变白富美!

  (1)从网上下载一个FBX模型文件;(这个网上很多,请自行百度或Google。我这里使用的是一个希腊圣殿的场景FBX文件,下载地址见本文底部。)另外,这里需要提醒一下:如果下载下来的FBX文件以中文命名,请将其改为英文命名,并且最好不要有空格。例如,我这里将其原文件名“希腊圣殿”改为TempleScene。

  Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (2)将下载的FBX模型文件拖动到Unity3D中的资源管理器区域中,完成后在资源管理器中会出现该模型文件图标;Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (3)将上图中带有播放按钮的TempleScene.FBX文件拖动到Scene(游戏场景视图)中,于是一秒变为希腊圣殿的场景!Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (4)这时我们稍微调整一下Main Camera和Cube的Position就可以浏览一下在圣殿场景下的Hello Cube程序了。Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (5)但是我们发现,虽然立方体可以随着我们的键盘方向操作翻转,但是场景一直停在一个固定的角度。于是乎,我们想让场景也随着立方体的翻转而转动,我们该怎么来做呢?这就涉及到我们刚刚所写的CubeControl脚本了,在Unity3D中脚本是需要和对象绑定才能正确运行的。因此,我们只需要把CubeControl和刚刚导入的这个圣殿的场景对象绑定一下即可。所以,这里从资源管理器区域中把CubeControl拖动到TempleScene处就OK了。最后,可以通过查看TempleScene的属性观察是否绑定上了脚本,如下图所示。Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

  (6)最后,通过点击播放按钮在模拟视图中可以查看。这下,只要我们按下键盘上的方向键,场景和立方体会一起转动,爽吧!Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生

PS:一般游戏公司里边会有这么几类角色:主程(主程序员)、主美(主美工师)以及策划、测试和客服。There is no doubt that 我们的目标是主程,精通一门开发语言,熟悉游戏脚本与服务端开发,对什么HTTP协议、Socket通讯等原理都懂一些,还了解一些常用的架构和设计模式,能够熟练操作SQL语言与数据库交互。但是,我们也不是神,不能啥都学啥都会,游戏场景设计这块是主美的饭碗,所以我们只需要将美工设计好的场景模型加入游戏中,我们为游戏对象写脚本,写交互代码让游戏真正动起来即可!

五、小结

  Unity3D是一个强大的游戏引擎平台,我们可以很方便地在其上编写一些简单的游戏程序。通过和美工的配合,我们完全可以开发出很酷炫的游戏。而且更为重要的是:

  1.Unity3D可以基于Mono实现跨平台,可以一次开发,多处运行;

  2.Unity3D可以使用C#编写脚本,众多的.NET程序员们可以快速学习上手,赶上手机游戏的浪潮尾巴;

  后面我们会继续初探Unity3D,实现一个地球围绕太阳转的Demo、为游戏添加地形、理解一下物理引擎、GUI,最后实现一个简单的打箱子游戏来结束这次初探之旅。另外,本人就一苦逼的计算机专业学生,写博文没多久,最近兴趣起来了,就写的多了一点,内容如有错误敬请谅解。博客内容借助于以下的参考文献资料,站在巨人的肩膀上,我们可以看得更远,在此,谢谢这些巨人们!

参考文献与资料

  (1)百度Unity3D百科:http://baike.baidu.com/link?url=jB3DpXJ9OQ39FEJB8qLEDfkMZL_dVBw2AFVPTICOACW6POmxt7EWaIAhhgiAre5mIfHRfxv5uGT82s_vLL2zPK

  (2)传智播客Unity3D公开课:http://net.itcast.cn/subject/Unity3D/index.html

  (3)yuxueliang,《Unity3D入门之Unity3D介绍以及编辑器的使用(1)》:http://www.cnblogs.com/yxlblogs/p/3486027.html

  (4)苏若年,《初始Unity3D开发3D游戏》:http://www.cnblogs.com/dennisit/archive/2013/05/25/3098227.html

附件

  (1)希腊圣殿场景FBX模型文件:http://pan.baidu.com/s/1eQCB4mY

作者:周旭龙

出处:http://www.cnblogs.com/edisonchou/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生的更多相关文章

  1. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

  2. 6、Cocos2dx 3.0游戏开发找小三之游戏的基本概念

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27689713 郝萌主友情提示: 人是习惯的产物,当你 ...

  3. Unity3D游戏开发初探—3.初步了解U3D物理引擎

    一.什么是物理引擎? 四个世纪前,物理学家牛顿发现了万有引力,并延伸出三大牛顿定理,为之后的物理学界的发展奠定了强大的理论基础.牛顿有句话是这么说的:“如果说我看得比较远的话,那是因为我站在巨人的肩膀 ...

  4. Unity3D游戏开发初探—4.开发一个“疯狂击箱子”游戏

    一.预备知识—对象的”生“与”死“ (1)如何在游戏脚本程序中创建对象而不是一开始就创建好对象?->使用GameObject的静态方法:CreatePrimitive() 以上一篇的博文中的“指 ...

  5. [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  6. [libgdx游戏开发教程]使用Libgdx进行游戏开发(10)-音乐和音效

    本章音效文件都来自于公共许可: http://files.cnblogs.com/mignet/sounds.zip 在游戏中,播放背景音乐和音效是基本的功能. Libgdx提供了跨平台的声音播放功能 ...

  7. python+pygame游戏开发之使用Py2exe打包游戏

    最近在用python+pygame 开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本. 这会吓退99%以上的人……所以把我们的游戏打包(注意是打包而不是编 ...

  8. 14、Cocos2dx 3.0三,找一个小游戏开发Scene and Layer:游戏梦想

    发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30474393 Scene :场景 了解了Director ...

  9. [libGDX游戏开发教程]使用libGDX进行游戏开发(12)-Action动画

    前文章节列表:  使用libGDX进行游戏开发(11)-高级编程技巧   使用libGDX进行游戏开发(10)-音乐音效不求人,程序员也可以DIY   使用libGDX进行游戏开发(9)-场景过渡   ...

随机推荐

  1. sql中limit使用方法

    此处以mysql为例,但是我相信物以变通在oracle上也一定适用 下面是几种limit的方法:原则看看下面几个例子应该就懂了 在数据库中很多地方都会用到,比如当你数据库查询记录有几万.几十万时使用l ...

  2. 循序渐进Python3(十二) --0--  web之框架

    web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf ...

  3. “请运行Chkdsk工具”怎么解决

    今天重新系统,想从移动硬盘中拷贝数据,但是老是提示:“请运行Chkdsk工具” 于是在百度搜索一下,有人提供的解决方案很不错,在些引用一下,以备忘! 电脑上经常遇到这样的提示“某某某文件已损坏且无法读 ...

  4. 拼接JSONStringer出现的不正确的情况。

    错误现象: 错误分析及其解答: JSONStringer可以直接嵌套JSONArray,JSONArray可以作为JSONStringer的值.我错误的原因是本质是:JSONArray存放的是JSON ...

  5. Amoeba for MySQL MySql集群软件

    一, Amoeba简述    Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发 ...

  6. .Net 垃圾回收机制原理(二)

    英文原文:Jeffrey Richter 编译:赵玉开 链接http://www.cnblogs.com/yukaizhao/archive/2011/11/25/dot_net_GC_2.html ...

  7. #添加屏蔽IP LINUX

    netfilter/iptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm 和 ipchains 等以前的工具都无法提供的一种重要功能.有状态的防火墙能够指定并记住为发送或接收信 ...

  8. cloudstack的ZONE删除不掉?来这招吧

    老是提示什么物理网络被使用之类的, 可以进数据库去直接删除. I want to delete a zone,by this way:(1)delete all VMs in zone.(2)dele ...

  9. Position详解---转

    position有四个属性值: relative absolute fixed static 下面分别讲述这四个属性. 1. relative relative属性,相对定位,我们要搞清它是相对哪个对 ...

  10. Struts2中的JSON问题——后台返回JSON字符串到前台

    最近做一个项目遇到一个比较棘手的问题,项目后台采用struts2+Hibernate3+Spring3,前台采用ExtJs4.笔者目前仍是一名大二学生吗,后台框架完全是毫无任何基础,从零学,现学现用. ...