国内开发制作的3d游戏开发有多少?

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
Unity3D研究院之2D游戏开发制作原理(二十一)
Unity3D研究院之2D游戏开发制作原理(二十一)
围观23784次
编辑日期: 字体:
经过了4个月不懈的努力,我和图灵教育合作的这本3D游戏开发书预计下个月就要出版了。这里MOMO先打一下广告,图灵的出版社编辑成员都非常给力,尤其是编辑小花为这本书付出了很大的努力,还有杨海玲老师,不然我也无法完成这本书的编写。等这本书出版了大家记得买喔,哇咔咔~ 下面,这篇文章是MOMO 3D游戏开发书籍中的一小段章节的修改版本,本篇文章我们将探讨一下Unity3D中如何来制作2D游戏。目前市面上已经有非常成熟的2D游戏引擎,比如cocos2d 或cocos2d-x等,并且都是免费的开发者可以直接用来制作2D游戏。然而使用3D引擎来制作2D游戏会让游戏画面更加附有立体感,因为2D游戏中Z轴永远是0,而3D游戏中Z轴是可变化的。
接着说说在Unity3D中制作2D游戏的原理。在Unity3D中绘制贴图的方式大致可分为两种,第一种是在GUI中绘制贴图,第二种是在网格面上绘制贴图。先说说第一种,GUI主要用来制作简单的游戏2D界面,比如游戏主界面中绘制的“游戏名称”、“开始游戏”、“保存游戏”、“退出游戏”一些按钮或界面中一切其它的高级控件,文本框,输入框等等、GUI只能制作简单的图形化界面,因为它的渲染效率非常低,它与3D世界中网格模型的渲染机制完全不一样。第二种的属于将图片绘制在3D中网格平面中,它的渲染效率远远高于GUI中,在制作2D游戏时都是将所有贴图绘制在平面模型对象之上,最后用摄像机以90度垂直的角度照射这这些平面。
下面我们开始学习在Unity3D中制作2D游戏的原理。2D游戏又可以分为两种,区别是物体碰撞时带物理引擎或不带物理引擎。带物理引擎就好比《奋斗的小鸟》一样,大家应该都玩过,小鸟发射后下落击落其它物体将发生物理的碰撞。(我没有细看这款游戏,但是我知道2D 与3D引擎都都可制作),不带物理引擎的就好比《捕鱼达人》这种游戏,游戏中碰撞都是由代码自己来完成的,经典的2D碰撞监测包括:矩形与矩形的碰撞、点与矩形的碰撞、圆与圆的碰撞等。今天这篇文章我们主要讨论第二种不带物理引擎的2D游戏。
如下图所示,我们盘点一下2D游戏中必备的几个元素。
摄像机:无论是3D游戏还是2D游戏摄像机都是非常重要的属性,移动摄像机即可更改屏幕中显示的内容,游戏地图的坐标永远都不会发生改变。
地图:2D游戏中的地图一般是由tile拼接而成,它可由地图编辑器生成然后将每一块tile绘制在整个贴图中,最后将贴图贴在平面网格面之上即可。还有一种作法是将两个或两个以上屏幕大小平面以队列的形式排在屏幕后面,当摄像机移动超出第一块面显示范围时,将它的坐标移动在第二块面后面,此时地图就形成了一个排序的队列。为了让地图的效果更加完美,一般地图可以由好几层来组成,比如背景层、与主角的遮挡曾、物理层等等。
地图拼接:地图的排序队列中两张图应当是可以无缝拼接,这个应当是由美术来提供资源,这里我就不那么细致了将远离说明白即可。
主角:它的范围就比较广的,敌人、物品等等出现在地图之上的都可以使用它。如果控制主角移动,摄像机移动的同时主角也当跟随移动,并且保持屏幕中的移动比例,除非摄像机无法移动,这时将直接移动主角在屏幕中的坐标。 说的有点绕了呵呵,大家仔细想想哈哈。。
然而上面的一切面是由Plane面来完成。
再Unity层次视图中选择摄像机对象,右侧监测面板视图中我们看看摄像机组件的一些属性,如下图所示。需要注意的就是Projection 投影类型。
首先我们应当修改摄像机的属性,默认摄像机投影的类型是Perspective,它保持摄像机以扩散的的形式照射着不利于2D平面的展示。这里我们应当选择Orthographic,这样摄像机将直直的照射在显示的区域。
Perspective类型
Orthographic
从侧面观察摄像机,通过这两张图我相信大家应当能看懂为什么2D游戏要用Orthographic了吧,摄像机的投影类型是可以在代码中动态的修改的。
//得到游戏中摄像机对象
Camera camera = Camera.mainCamera;
//设置摄像机投影类型OrthoGraphic
camera.isOrthoGraphic = true;
//设置摄像机投影类型Perspective
camera.isOrthoGraphic = false;
在代码中取得摄像机投影的区域大小,它也可以动态的修改,这样就可是实现摄像机拉近与拉远的效果。根据投影区域的大小配合着整个地图的宽高来写判断条件,避免移动摄像机时超过地图的范围。
Camera camera = Camera.mainCamera;
Debug.Log(camera.orthographicSize);
接着我们使用代码来得到地图面的宽高,这段代码写的就比较精细,因为网格面是可以缩放的,首先得到网格面的宽与高,然后分别乘以缩放系数就可以得到真实面的宽与高,然而Unity中的坐标是以“米”为单位。下面代码中用到了中文,如果要想在编辑器中显示中文C#语言需要修改编码格式为UTF-16。JavaScript修改编码格式UTF-8或UTF-16即可。
1234567891011121314151617181920212223242526272829
using UnityEngine;using System.Collections;&public class Test : MonoBehaviour {& void Start ()
{& &&&&GameObject plane = GameObject.Find("Plane0");
//得到面默认宽度
float size_x = plane.GetComponent&MeshFilter&().mesh.bounds.size.x;
//得到面宽度的缩放比例
float scal_x = plane.transform.localScale.x;
//得到面默认高度
float size_z = plane.GetComponent&MeshFilter&().mesh.bounds.size.z;
//得到面高度缩放比例
float scal_z = plane.transform.localScale.z;&
//原始宽度乘以缩放比例计算出真实宽度
float mapWidth = size_x * scal_x;
float mapHeight = size_z * scal_z;&
Debug.Log("得到面的位置:"+plane.transform.position);
Debug.Log("得到面的宽度:"+ mapWidth);
Debug.Log("得到面的高度:"+ mapHeight); }&}
有了摄像机照射的区域以及背景地图的宽高尺寸那么就可以在代码中编写逻辑判断条件啦。下面我们来使用简单的代码控制摄像机移动以及主角移动。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
using UnityEngine;using System.Collections;&public class Controller : MonoBehaviour {& //动画数组 private Object[] anim; //主角对象 private GameObject hero; //限制一秒多少帧 private float fps = 10; //帧序列 private int nowFram; //记录当前时间 private float time;& void Start () {
//得到资源名称为down文件夹中的所有对象资源
anim = Resources.LoadAll("down");
//得到主角的对象
hero = GameObject.Find("hero");
}& void FixedUpdate ()
//上、下、左、右平移摄像机
if (Input.GetKey (KeyCode.A))
transform.Translate(-0.01f,0,0);&&&
if(Input.GetKey (KeyCode.D))
transform.Translate(0.01f,0,0);&&
if (Input.GetKey (KeyCode.W))
transform.Translate(0,0.01f,0);&&
if(Input.GetKey (KeyCode.S))
transform.Translate(0,-0.01f,0);&&
//上、下、左、右平移主角 &&&&if (Input.GetKey (KeyCode.J))
&&&&hero.transform.Translate(0.001f,0,0);&&
if(Input.GetKey (KeyCode.L))
&&&&hero.transform.Translate(-0.001f,0,0);&&
if (Input.GetKey (KeyCode.I))
hero.transform.Translate(0,0,-0.001f);&&
if(Input.GetKey (KeyCode.K))
hero.transform.Translate(0,0,0.001f);&&&&
DrawAnimation(anim); }& void&&DrawAnimation(Object[] tex) {&
//计算限制帧的时间
time += Time.deltaTime;
//超过限制帧切换贴图
if(time &= 1.0 / fps){
//帧序列切换&&&&&&
nowFram++;
//限制帧清空&&&&&&
//超过帧动画总数从第0帧开始&&&&&&
if(nowFram &= tex.Length)&&&&&&
nowFram = 0;&&&&&&
}&&&&&&&&}
//将对应的贴图赋予主角对象,强制将资源文件转换成贴图&&&&&&&&hero.renderer.material.mainTexture = (Texture)tex[nowFram];
代码中我们使用 Resources.LoadAll(“down”);来加载主角动画资源,这里将主角一组4帧的行走动画放在项目资源视图中 Resources文件夹中的down文件夹内。值得注意的是,使用Resources来加载资源就必须将资源放在Resources文件夹中,否则提示无法找到喔。在书中我以将人物四宫格行走动画加入在其中,因为这里只是一个是示例,所以我只加载了向下行走的4帧动画。我们看看资源在项目资源视图中的保存结构。
还有一个比较重要的地方就是要修改材质的shder类型,因为默认的材质是Diffuse,它是不支持透明的。如果材质不支持透明。主角的背景将会是白色。如下图所示,这里选择Transparent/Diffuse。保存为Transparent家族中的材质都是支持透明的。
最后2D游戏效果图映入我们眼帘了哦。按键W、S、A、D控制摄像机移动,按键J、K、I、L、控制主角移动。
总结一下这篇文章,本文我们在多个Plane对象身上贴上材质资源,再让摄像机直直的照射着它。实现2D游戏的基本原理,本文没有涉及到Unity3D的物理引擎,不要紧在下章中我将向大家介绍一下Unity3D中的刚体组件与角色控制器组件如何来实现模型的物理效果,包括物理引擎与3D或2D游戏的结合。另外大家一定要期待我的新书喔,哇咔咔~嘿嘿。
本文固定链接:
转载请注明:
MOMO与MO嫂提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!国内航天NEWS OF DOMESTIC SPACE
&&国内航天
航天19所开发裸眼3D显示制作技术
来源:&&本站&&&&作者:&&本站&&&&日期:
& & 一部《少年派的奇幻漂流》凭借完美的3D效果、绚丽的视觉奇观再次唤起人们对3D影像的渴望。3D粉丝们在沉迷于立体影像所带来的逼真、刺激的视觉冲击的同时,也感到了美中不足的&枷锁&&&3D眼镜,致使他们在观看长达一个多小时的影片时,有时会产生眩晕甚至恶心等不适感。而裸眼3D技术的到来,无疑给颇受欢迎的3D技术带来新的前景。
& & 但是目前,裸眼3D技术在全世界范围内尚处在研发阶段,众多科技&掘金者&将这项技术作为自己的下一个目标&金矿&。就在这时,人们意外地发现中国航天科技集团公司一院在参加南非航展时,利用裸眼3D技术向国际客户宣传展示大火箭的发射流程和各项性能参数,瞬间吸引了无数人驻足。
& & 记者了解到,不久前,一院19所已经成功掌握了裸眼3D显示制作技术,在航天系统&多媒体应用领域&实现突破。他们是如何研究掌握这项技术的,拥有了技术之后又如何起步?为此,记者来到一院19所寻找答案。
掌握技术的&前世今生&
& & &为了让大火箭在这次南非航展上出彩,我们想了好多点子,最后觉得裸眼3D是个好主意,所以就歪打正着地干了。&该所朱博边演示大火箭的宣传片边向记者普及这项技术的&前世今生&。
& & 1839年,英国科学家温特斯顿发现了一个奇妙的现象,人的两眼间距约5厘米左右,看任何物体两眼的角度都不尽相同。这种细微的角度差别经由视网膜传输至大脑后,才区分出景物的前后远近,进而产生强烈的立体感。这就是3D的秘密&&&偏光原理&。
& & 电影导演利用这个原理,用两台摄影机模拟左右两眼视差,分别拍摄两条影片,然后将这两条影片同时放映到银幕上,再加入必要的技术手段,让观众左眼只能看到左眼图像,右眼只能看到右眼图像。输出两幅图像经过大脑叠合后的影像,经过特制的3D眼镜纠正画面的重影和偏色后,我们就能看到影片中的人物跃出屏幕,向我们走来。
& & &裸眼3D依然沿用这个原理,但是它把眼镜直接戴到了显示器上。&朱博半开玩笑地说,一块特制的显示屏是&摘掉眼镜&的关键,其次是影片的制作技术。目前,19所掌握的是影片的制作技术。
& & 相比于戴眼镜的3D显示技术,裸眼3D更具有实用价值,也更容易被观众所接受。因此这项技术非常适合在公共场所展示。
& & 距离南非航展开幕三个月时,19所购置了一套裸眼3D的硬件设备,并开始着手将一部二维的大火箭宣传片改造成&立体版&。&传统的立体显示制作是把两幅同样的画面重叠在一起,而裸眼3D技术则需要将8幅以上的画面组合在一起,八台摄像机之间、摄像机和物体背景之间的距离都要精确计算,才能让观看者从不同角度看清画面图像。&朱博说他们最大的困难就是要将每一个画面渲染后进行重叠,每个画面之间的距离都要靠自己去琢磨和把握好,不然就做不出效果。用三个月时间完成这部宣传片的&改造&几乎是一项&不可能的任务&,&每一帧画面生成前的渲染是普通画面的八倍,更何况只能在那一台特制的电脑中完成。&19所主任助理崔钰说。为此,他们在第一时间研发了一套全新的软件应用于普通电脑,让七台普通电脑和一台特制电脑一起,同一时间开足马力共同完成这项任务。
&烧钱&行业的攻守之计
& & 作为国内少有的几家掌握裸眼3D制作技术的单位,19所也考虑到了开拓市场,抢占先机。&这个看似抢眼的商机背后危机四伏,我们必须做足功夫,避免功亏一篑。&崔钰说。
& & 3D影像是名副其实的&烧钱&行业。动辄上万元的裸眼3D电脑较长一段时间内都可能是一种&炫富品&。另一方面,制作裸眼3D所耗费的成本高、难以量产,必然导致整个市场的供需&缩水&&&
& & &问题层出不穷,3D影像产业起跑线上熙熙攘攘的背后,也饱受资金、人才、产业整合等重重困扰。&崔钰坦言,基于这些原因,他们将&开拓外部市场&的想法放在了&满足内部市场&之后。
& & 从外部来看,目前是一个二维源为主的时代,裸眼3D只能作为一种特殊的观看体验。然而对一院来说其意义远非如此。&
& & 自南非航展之后,一院将此技术主要用于型号产品的虚拟仿真演示,立项方案评审、流程演示等方面,使观众能直观地了解型号的使用流程、各项参数以及关键技术的三维重现。
& & &基于八台摄像机的环绕式拍摄,裸眼3D能达到360度无死角的效果。后续,该技术还能为型号产品的仿真数据驱动提供优良的立体可视化支撑。&崔钰说,若该技术能应用于型号产品的仿真试验中,除了能更精确、更直观地反映产品的真实状态之外,还将缓解研发人员在视觉上的疲劳。
& & 由于传统的3D影像靠两台摄像机同时工作来模拟人的眼睛,这种模拟不能很好地控制和调整,必然会造成一些画面和现实世界有较大出入,从而出现&晕眩&感。目前的裸眼3D技术为此配置了一副良方&&&头部跟踪技术&,即利用头部跟踪来矫正三维画面的显示,实现人体的最舒适感受。
& & 从全球范围看,3D产业属于朝阳行业,拥有自主创新实力的中国企业与欧美巨头实际上是处于同一起跑线上。全球都在期待着迎来一个全新科技&爆炸&的临界点。对于19所的领导层来说,他们欣喜地看到自己的团队已经先人一步撬开了&金矿&大门的一角,下一步是&攻&还是&守&,如何&守&、何时&攻&,是他们考虑最多的一个问题。
Copyright (C)
航天(北京)科技文化发展有限公司大型3D网络游戏是如何开发制作的?_百度知道
大型3D网络游戏是如何开发制作的?
如题,比如 天堂2,魔兽世界,永恒之塔 这种大型的3D网络游戏是如何开发的?需要用到些什么工具?需要具备些什么知识?所谓的游戏引擎怎么制作?游戏的编程用的是什么语言?vs还是C++?3D建模,通常用Maya还是3Dmax,网络连接等等。希望说的越详细越好,若满意还会追加分。
提问者采纳
游戏开发中的程序开发主要由如下几个方面组成:
1.图形引擎
2.声音引擎
3.物理引擎
4.游戏引擎
5.人工智能或游戏逻辑
6.游戏GUI界面(菜单)
7.游戏开发工具
8.支持局域网对战的网络引擎开发
9.支持互联网对战的网络引擎开发
下面逐一介绍每个部分:
1.图形引擎主要包含游戏中的场景(室内或室外)管理与渲染,角色的动作管理绘制,特效管理与渲染(粒子系统,自然模拟(如水纹,植物等模拟)),光照和材质处理,LOD(Level Object Detail)管理等,另外还有图形数据转换工具开发,这些工具主要用于把美工用DCC软件(如3DS Max,Maya,Soft XSI,Soft Image3D等)软件制作的模型和动作数据以及用Photo shop或painter等工具制作的贴图,转化成游戏程序中用的资源文件。
2.声音引擎主要包含音效(Sound Effect简称SE),语音(VOICE),背景音乐(Background music简称BGM)的播放。SE是指那些在游戏中频繁播放,而且播放时间比较短,但要求能及时无延迟的播放,VOICE是指游戏中的语音或人声,这部分对声音品质要求比较高,基本上用比较高的采样率录制和回放声音,但和SE一样要求能及时无延迟的播放,SE在有的时候因为内存容量的问题,在不影响效果的前提下,可能会降低采样率,但VOICE由于降低采样率对效果影响比较大,所以一般VOICE不采用降低采样率的做法。BGM是指游戏中一长段循环播放(也有不循环,只播放一次)的背景音乐,正是由于BGM的这种特性,一般游戏的背景音乐是读盘(光盘或硬盘)来播放。另外一些高级声音特效,如EAX,数字影院系统(DTS5.1),数字杜比环绕等。
3.物理引擎主要包含游戏世界中的物体之间、物体和场景之间发生碰撞后的力学模拟, 以及发生碰撞后的物体骨骼运动的力学模拟(比较著名的物理引擎有havok公司的game dynamics sdk,还有open source 的ODE—Open Dynamics Engine)。
4.游戏引擎主要是把图形引擎、声音引擎、物理引擎整合起来,主要针对某个游戏制作一个游戏系统,其包含游戏关卡编辑器,主要用途是可以可视化的对场景进行调整,光照效果和雾化等效果调整,事件设置,道具摆放,NPC设置,另外还有角色编辑器,主要用于编辑角色的属性和检查动作数据的正确性。一般日本游戏公司的做法,他们会把关卡编辑器和角色编辑器直接做到游戏中,所有的参数调整都在游戏中通过调试菜单来进行编辑,所以一般他们把这部分调试菜单的功能做的很强大,同时在屏幕上实时的显示一些重要的信息,这样做的好处是关卡编辑器调整的效果直接就是游戏的效果,但是对于程序的重用性来说可能不是很好,比如说要用到另外一个游戏项目中就比较难,除非两个游戏类型相同,只要把场景和角色数据换一下,还有做下一代产品也没有问题,只要根据式样增加调试菜单的功能就可以了。
5.人工智能和游戏逻辑开发,这部分日本和欧美的游戏开发模式也有很大不同,在欧美游戏公司中运用脚本语言开发很普遍,所以这部分程序开发主要是用脚本语言编写,而且脚本程序和游戏程序的耦合性很低,有单独的编辑、编译和调试环境,这样比较利于游戏程序和关卡设计开发分开,同时并行开发,所以一般他们都会有专门做关卡设计的程序员岗位。而日本游戏公司脚本语言一般和游戏的耦合性比较高,一般通过一些语言的宏功能和一些编译器的特定功能来完成一个简单的脚本系统,所以一般这些脚本程序只能在游戏程序中进行调试,而不能在一个单独的脚本编辑,编译环境中进行开发。
6.游戏GUI界面(菜单),主要是指那些游戏中用户界面设计,有做的复杂,有简单的,做的简单就是2D GUI界面,做的复杂有3D GUI界面。
7.游戏开发工具主要包含关卡编辑器,角色编辑器,资源打包管理,DCC软件的插件工具等开发。
8.支持局域网对战的网络引擎开发,主要解决局域网网络发包和延迟处理,通讯同步的问题,有同步通讯和异步通讯两种做法,异步通讯用于那些对运行帧速要求比较高的游戏,同步通讯相对异步通讯来说效率相对低,但是同步通讯的编程模型相对异步通讯来得简单一些。
9.支持互联网对战的网络引擎开发,目前大部分网游都是C/S结构的,服务器端软件配置管理,服务器程序的最优化,还有游戏大厅、组队、游戏逻辑处理、道具管理、收费系统等。另外还有一些网络系统是C/S和P2P两种结构混合的,如XBOX Live等.
其他类似问题
按默认排序
其他4条回答
主要分几大模块:3D建模&声音&地图设计;游戏角色的数据结构设计;游戏运行设计;网络方面;地图设计;AI设计。下面分别介绍:一、3D建模&声音这些主要是美工人员的工作,主要包括音乐制作;3D模型制作(现在Maya最常用),这个不光是静态模型的制作,还要包括运动姿态的动作。二、游戏角色的数据结构设计现在来讲这一部分,用C++的比较多。因为C++的继承性比java好一些,而且运行速度快。比如设计出个基类--人物:所有游戏人物角色都继承于此类,此基类的属性有血,魔,生/死,方法有运动(上下左右)等。所有的子继承都是在这个框架上添血加肉。再比如说建筑物的基类,属性就是血有多少,方法一般没有,但像星际那样房子可以飘起来,那就是建筑物的一个方法。除了对象设计之外,还要编写对象操作3D模型的接口。什么是接口呢?就用对象的方法操作3D模型的表现。比如人物的行走,攻击等不同的方法对应模型的不同动作。三、游戏运行设计就是游戏运行的时候,的一个共同遵守的条约。有一个动态栈式结构,存储当前存活的人物,如果一个人物的属性为死亡,那么运行时过几秒后就将该人物从栈式结构中删除。还有,比如出现多个人物挤在一起的时候,要设计算法让他们一个一个通过。四、网络方面这个方面也比较重要,现在大部分游戏是C/S的模式。设计同步性是非常重要的。比如战斗运算中,你对一个敌人发了致命一招,这一招你发出去后,数据包发送到对方电脑上是有一定时差的,如果在该数据包接收之前,他又给你发了一招,那么谁先阵亡呢?在你对手眼中应该你先阵亡,而在你眼中他应该先死。这个一定要设计的严谨,包括系统公用时间,网络延迟的判断等等,对于游戏体验有重要的影响。五、地图设计地图实际就是一个大的二维数据结构,在运行时载入游戏运行程序中,有些地方可以走,有些地方走不通,这实际就是二维结构中每一点的属性值不同。六、AI设计AI就是人工智能,如果和电脑对战的时候电脑的操作就是AI控制的,根据选择的电脑难度不同,AI会采取或聪明或傻的行动。另外AI对玩家操作也有帮助,比如玩FIFA的时候,你操控一个运动员往前跑,其它队员也会自动走位。
你好!你说的这些问题应给是一本书的量去给你解答,游戏编程是很复杂很庞大的工程。建议你买本游戏开发导论这样的书看看。你会受益匪浅的!
楼上说的很有道理 啊
现在可以发达了
再加上各种设计就OK了
3d网络游戏的相关知识
您可能关注的推广回答者:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 3d游戏开发 的文章

 

随机推荐