
用了几个月UNITY3D的感受
好用,方便高级功能不足,AI 寻路 只要你不做3A级大作就够用了
如何正确的使用UNITY3D制作FPS游戏
第一部分:简介这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS)。
其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思考的技巧。
前提这个教程假定你已经熟悉软件Unity基本操作,掌握了基本的脚本概念。
创建新工程下载FPS_Tutorial.zip压缩文件,解压,在Unity中打开工程文件。
从Unity安装目录导入Standard Assets资源包。
导入工程后,你会在Unity工程面板中的“Standard Assets”文件夹下看见这些资源内容。
当我们导入新资源时,最好安装按照资源功能对其分组,例如:火箭、爆炸、音频等。
设置游戏环境导入资源后,你会注意到在工程面板中有许多文件工程面板中,从文件夹“Object\\\/mainLevelMesh”中选择“mainLevelMesh”。
在参数面板,FBXImporter选项中,你会发现“Generate Colliders”选项,勾选此选项。
如果不做这一步,游戏中玩家会穿越地面直接掉下深渊(实际是开启“碰撞”,产生交互)把“mainLevelMesh”拖放到场景中。
场景中不需要添加灯光,这关全部场景已经全部应用了灯光贴图。
整个场景对所有灯光进行了灯光贴图渲染,使用了“预烘焙阴影”。
灯光贴图对显示效果有很大帮助,特别是复杂灯光环境。
下面可以在场景中添加一个角色了。
添加主要角色下面在场景中增加一个可以操控的角色物体。
Unity针对第一人称射击游戏预置了许多内置的控制器,在工程面板Standard Assets->;Prefabs下。
添加第一人称控制器,点击工程面板Standard Assets旁边的小三角,弹出资源列表。
找到Prefabs文件夹,点击小三角形,弹出资源列表。
把“First person controller”拖到场景里。
这时场景中会出现一个代表玩家的圆柱体,三个大箭头代表物体在3D空间中的位置(如果没有看见箭头,选择物体,按“W”键),白色面代表物体当前视角。
现在FPS控制器处于默认视角位置,通过移动它可以改变游戏视野。
把角色移动到游戏环境关卡地面上面的位置。
Main Camera现在已经没有用处了,可以删掉了。
点击“Play”键,现在应该可以通过使用鼠标和键盘在本关卡地形中四处移动了(光标或者“W,A,S,D”)现在我们创建了一个非常简单的FSP,下面我们给角色添加武器。
增加武器下面我们将给游戏角色一个类似榴弹的物体,可以在游戏中发射。
要实现这个功能,需要创建一些脚本语言来在Unity中告知这个武器如何动作。
那么我们具体要实现什么呢
我们要使游戏角色能在摄像机的任意位置开火。
但是,我们还是首先来思考一下游戏角色和武器。
游戏角色游戏中是第一人称的视角,所以摄像机的位置与眼睛平行。
如果玩家使用武器射击,武器应该是在角色的手部位置开火而不是眼睛的位置。
这样我们就要增加一个“game object”(游戏物体)来代表榴弹发射器,同时把它放置在游戏角色手持武器时武器所处的位置。
这样就保证了开火的位置没有问题。
创建武器发射器首先,创建一个“game object”代表榴弹发射器。
游戏物体是3D世界中的任一物体(角色、关卡、声音),零件就是游戏物体的属性。
因此我们还需要对游戏物体添加零件:从主菜单栏选择GameObject>Great Empty,并在层级面板中(Hierarchy)命名为“Launcher”。
注意,空物体在场景中是看不见的,只是用它来作放置飞弹发射器。
现在在场景中把视野推近到FPS控制器,便于我们放置武器发射器。
层级面板中选择FPS控制器,确保鼠标处于场景视图中,按“F”键。
使窗口以当前选择的物体为中心。
层级面板中选择发射器,主菜单栏选择Game Object>Move to view。
注意发射器如何移动到FPS控制器附近的。
然后使用手柄,把发射器移动到大概角色手部的位置。
注意:可以通过设置这个物体的位置来设定游戏角色是左撇子还是右撇子,不需要写代码。
使Unity窗口模式是“2by3”模式(window>Layouts>2by3),点击播放键(play)。
确保层级面板中点选了发射器,四处移动角色,同时观察场景窗口。
你将发现发射器并没有随着角色一起运动(现在再次点击播放键停止运行游戏)下面来解决这个问题,层级面板中,把发射器拖放到FPS控制器下面的主摄像机上。
弹出的对话框点击“是”。
再次运行游戏,观察场景窗口,发射器已经和角色运动一致了。
这样我们就把发射器与摄像机关联起来了。
创建飞弹下面我们来创建在玩家点击开火键时能够发射出来的飞弹。
我们先用一个简单物体-球体-代替飞弹。
Unity主菜单栏点击Assets>Creat>;Prefab创建一个预制(Prefab)物体,命名为“Missile”创建一个球体(GameObject>Create Object>Sphere)层级面板中,拖放球体到飞弹预制物体上(Missile),这时预制物体图标会变化。
你可以从层级面板中删除球体。
技巧:游戏运行中产生的任何游戏物体都应该是预制物体(Prefab)。
编写飞弹发射器脚本FPS控制器是一个包含了几个游戏物体和部件的预制物体。
FPS控制器本身是一个只能沿Y轴旋转的圆柱体,因此,如果我们直接把发射器脚本赋予FPS控制器的话,是实现不了上下开火的。
所以我们把脚本赋予控制器中的能够四周转动的主摄像机。
下面我们来编写第一个描述发射器行为的JavaScript代码。
点击Assets>Greate>JavaScript,创建一个空的JavaScript文档。
一个名为“NewBehaviourScript”资源将会出现在工程面板中,把它更名为“MissileLauncher”技巧:通过Unity>;Preferences点击External Script Editor,可以自定义外部脚本编辑器。
工程面板中创建一个“WeaponScripts”文件夹,放置我们所有的武器脚本。
把MissileLauncher脚本和飞弹预制物体(Missile Prefab)拖到这个文件中。
我们来看看飞弹发射器的完整JavaScript脚本。
进一步思考一下,我们到底想实现什么效果
我们要检测玩家是否按了开火键,然后产生一枚飞弹,然后把它沿着玩家朝向的方向按照一定的速度发射出去。
我们仔细的解剖一下脚本:var projectile: Rigibody;var speed=20;function Update( ){这是脚本的开头部分,定义了一些属性,开启了“Update”的功能if(Input.GetButtonDown(“Fire1”))首先我们要检测玩家是否按了开火键,“开火1”映射的是鼠标左键和当前配置的键盘上的按键(可以通过主菜单栏的Editor>;Project Settings>Input设定){var instantiatedProjectile: Rigidbody=Instantiate(projectile, transform.position,transform.rotation);我们用变量来定义产生的物体。
变量的类型是Rigibody(刚体),因为飞弹是具有物理属性的。
Unity中产生新物体使用的函数是Instantiate,它有三个参数,分别是:产生的物体、产生物体的3D空间位置、物体的旋转。
它还有另一个语法结构,参照API手册,这里我们只使用这种结构。
第一个参数,projectile,代表我们想创建的物体。
那么到底发射什么物体
具体产生的物体是可以手动设定的。
实现方法:把Projectile定义为函数的外部变量,这样就可以在参数面板中显示出来。
发射的物体也可以通过代码来创建,但如果你想使一个变量可调的话,还是用上面的方法。
第二个参数,transform.position,使产生的物体与发射器的空间位置一致。
为什么就是发射器呢
因为如果要使飞弹产生的位置没有问题,脚本就要关联给发射器。
(transform读取的transform数据就是被赋予脚本的游戏物体transform数据)第三个参数transform.rotation,与第二个类似,只是它的值与发射器的旋转值是一样的。
代码的下一部分使飞弹产生运动。
为了实现运动,我们要赋予飞弹一个速度,但是在哪个方向上(X,Y,Z)产生速度呢
在场景中,点击FPS控制器,出现运动箭头(如果没有出现,按“W”键),其中一个箭头是红色、一个是绿色、一个是蓝色。
红色代表X轴,绿色代表Y轴,蓝色代表Z轴。
因为蓝色指向的方向,与玩家面朝的方向一致,所以我们要在Z轴上给飞弹一个速度。
(Velocity)速度是instantiatedProjectile的一个属性。
我们怎么知道的呢
因为instantiatedProjectile是刚体的一种,如果我们看看API手册,我们就会知道速度是刚体的属性中的一种。
同时也看看刚体的其它属性。
要设置速度,我们就必须在各个轴向上设定数值。
但还有个小问题。
3D空间中的物体一般使用两种坐标模型:本地坐标系和世界坐标系。
在本地坐标系中,物体的轴向只与物体本身有关。
在世界坐标系中,轴向是绝对的,例如:向上,对所有物体来讲向上的方向都是一样的。
Rigidbody.Vellocity刚体物体速度必须使用世界坐标系。
因此,定义速度时,需要把本地坐标系中的Z轴(朝前的方向)向转换成世界坐标系中的相应方向。
可以用函数transform.TransformDirection,它有三个向量作为自变量。
变量speed也应该定义成外部变量,便于后面在编辑器中直接调节数值。
最后,我们要关闭飞弹与游戏角色之间的碰撞。
如果不这样做的话,飞弹产生的时候就可能与角色发生碰撞。
可以在API手册IgnoreCollision下查询详细信息。
MissileLauncher.js全部完整代码如下:把脚本MissileLauncher赋予FPS控制器中的发射器。
在层级面板中点击发射器,检查一下参数面板下面是否显示了MissileLauncher script。
先前创建的飞弹的预制物体还没有与脚本中的变量projectile创建关联,我们需要在编辑器中创建一下。
变量projectile只能与刚体关联,因此,首先我们要赋予飞弹一个Rigidbody。
工程面板中点击飞弹,然后从主菜单栏选择Components>;Physics>Rigidbody。
这样将会给我们想开火发射的飞弹一个刚体属性。
我们必须确保想在游戏中发射的物体类型与脚本中外部变量要求的物体类型是同一类型的物体。
创建飞弹与脚本中变量projectile的链接。
首先在层级面板中点击发射器,然后把飞弹的预制物体从工程面板中拖拽放置在发射器参数面板中MissileLauncher script部分上。
运行游戏的话,你会发现点击开火键可以发出一个受重力影响的小球了。
飞弹爆炸下面,当飞弹与其他物体发生碰撞时,增加一个爆炸效果。
要实现这个效果,我们要编写一段新脚本赋予飞弹。
创建一个新脚本,命名为Projectile。
拖放到工程面板的WeaponScripts文件夹下。
那么我们想要脚本Projectile实现什么样的效果呢
我们要检测飞弹是否发生碰撞,然后在碰撞点产生一个爆炸效果。
代码如下:函数OnCollisionEnter内的程序代码的作用是计算被赋予脚本的物体是否与其他物体发生碰撞。
在函数OnCollisionEnter中我们主要是要实现在3D空间中飞弹发生碰撞的点产生一个新爆炸。
那么在何处了碰撞的呢
函数OnCollisionEnter就有个记录这个信息的功能。
碰撞发生的点的信息储存在变量ContactPoint中。
这里我们使用函数Instantiate来创建一个爆炸。
我们已经知道函数instatiate有三个参数:(1)产生的物体(2)物体的3D空间位置(3)物体的旋转。
第一个参数,后面我们将会赋给一个带粒子系统的游戏物体。
同时我们还想通过编辑器来实现这个功能,所以我们把变量设置为外部变量。
第二个参数,爆炸产生的点的位置,就是碰撞发生的位置。
第三个参数,爆炸旋转的设置,需要解释一下。
我们需要爆炸体的Y轴方向与飞弹和其他物体发生碰撞的那个表面的法线方向一致。
这就是说如果是墙面那么爆炸就面向外,如果是地板就朝上。
那么实际上我们就是要使爆炸体在本地坐标系的Y轴与飞弹与之碰撞的物体的表面法线方向(世界坐标系)一致。
最后,我们要让飞弹碰撞后就从游戏中消失,通过函数Destroy()实现,它的参数是gameObject(gameObject代表被赋予这个脚本的物体)。
Projectile.js全部代码如下:把脚本赋予飞弹预制物体(Missile prefab)。
下面我们要创建飞弹发生碰撞时所产生爆炸的爆炸效果物体。
首先,创建一个新的预制物体(命名为Explosion)用来存放爆炸效果资源。
标准资源包中(standard asset)有个不错的爆炸预制物体,粒子系统和灯光都设置好了。
把这个爆炸预制物体(在Standard Assets\\\/Particles\\\/explosion中)拖放到层级面板。
调节这个爆炸效果的各个参数直到你觉得满意,然后把它从层级面板中拖放到工程面板中的爆炸预制物体(Explosion Prefab)中。
现在把爆炸配置给飞弹:点选飞弹预制物体(Missile Prefab),在参数面板Explosion变量栏,拖放工程面板中的爆炸到上面。
定义爆炸的行为下面我们要再创建一个脚本来定义爆炸自身的特性。
创建一个新的脚本-Explosion,放在Weapons文件夹中,双击脚本进行编辑。
脚本中另一个常用函数称为Start()。
当它配置给的物体是在游戏中产生的时候,函数Start()中的代码只被执行一次。
我们要实现的效果就是在一定时间后,在游戏中删除爆炸。
我们通过函数Destroy()的第二个参数实现,它的作用是定义执行删除前的时间长度。
变量explosionTime设置成外部变量,方便调节。
新建脚本插入以上代码时,要删除函数Update()。
把脚本Explosion赋予给爆炸预制物体。
音效目前的游戏世界太安静了,让我们给爆炸效果增加点音效。
首先,给爆炸预制(Prefab)添加一段音频。
给爆炸添加音效前,我们首先要添加一个音源部件(Audio Source),在主菜单点击Component—Audio—Audio Source。
你会发现音源部件有一个Audio Clip的属性。
把“RocketLauncherImpact”音效添加给爆炸预制体的AudioClip外部变量。
Unity支持多种音频格式。
运行游戏,发射飞弹的时候就有声音了
添加图形界面下面我们来添加GUI,有点像头部显示设备(HUD)。
我们要做的GUI非常简单,就一个准星。
添加一个准星:工程栏中创建一个GUI的文件夹。
创建一个新脚本,命名为“准星”(Crosshair),拖到GUI文件夹。
Crosshair中写入下面的脚本:首先我们设定了两个变量。
第一个变量是定义我们将要用可选的方式来选择图形纹理。
第二个变量定义了一个方形区间,它是图形纹理在屏幕上的位置范围。
在start( ) 中函数用来设定图形纹理在屏幕上的位置。
函数中,有四个参数,用来定义方形区域的大小和位置。
第一个参数定义了方形区域的左边框,第二个是底边框,第三和第四个参数定义了宽和高。
OnGUI( )函数中,使用GUI类程序来让图形显示在屏幕上。
DrawTexture( )函数的参数position和crosshairTexture将使准星显示在屏幕的中央位置。
保存脚本。
创建一个新的空物体,命名为“GUI”。
把脚本“Crosshair”赋予给GUI物体。
点选GUI物体,把在文件夹Texturelaim下的欲使用的图形拖放到参数面板变量Crosshair Texture中。
运行游戏,屏幕中就会有准星显示了。
物理特效:现在,我们想要游戏中的物体效果越真实越好,这是通过添加物理特效实现的。
在这一节中,我们将在环境中添加一些物体,他们能被飞弹击中后有相应的反应。
首先有几个新概念要解释下。
校正(Update)先前,我们在函数Update()中写入代码,这样可以在每一帧都执行其中的代码。
其中有个例子是检测玩家点击开火键。
帧速并不是一个固定值,它是根据场景复杂度等因素来定的。
各帧之间的时间差会导致不稳定的物体反应。
因此,如果想在场景中添加有物理反应的物体(刚体等),代码就应该写在函数FixedUpdate()中。
Unity中deltaTime的值用来测定渲染两个连续帧的所用时间。
一般而言,函数Update与FixedUpdate之间的区别如下:Update()-其中的代码通常用于角色行为、游戏逻辑等。
这个函数中的deltaTime值并不是固定的。
FixedUpdate()-其中的代码通常用于刚体物体(物理属性的行为)。
函数中deltaTime的值通常是固定的。
FixedUpdate函数被调用的频率是主菜单中Edit-Project Settings-Time的FixedTimestep属性确定的,当然也是可以更改的。
第二个属性Time Scale是读取每秒的帧速和相应的倒数值。
技巧:定义FixedTimestep值时,要注意把握好一个平衡:值越小,物理效果越真实越好,但影响游戏运行速度。
应该同时确保游戏运行速度和物理效果的真实性。
最后说一下yield,它相当于暂停当前正在执行的函数。
回到游戏,我们想实现的效果:使玩家可以发射飞弹(已经实现了)。
如果飞弹与其它刚体物体发生碰撞,检测其范围类是否有其它被赋予刚体属性的物体。
对爆炸冲击力范围内的每个刚体物体,均给予一个upwards方向上的力,使它们对飞弹产生反应。
让我们看看修改后的爆炸脚本(Explosion Javascript)首先检测下飞弹落点周围是否有带碰撞器的物体。
函数Physics.OverlapSphere()有两个参数:3D位置和半径值,然后返回一组检测到的在半径内的碰撞器的数组。
一旦得到这些数组后,就会对每个对应碰撞器的刚体物体一个在特定方向上的力。
然后我们在飞弹的炸点处,向上的方向增加一个力(ExplosionPower)。
但是,爆炸效果是随着距离而递减的,作用力大小不能在整个半径内都一样。
圆周位置的刚体物体受到的作用力应该比炸点中心处小。
函数把这种效果也考虑在内的。
通过调节外部变量explosionPower和explosionRadius的值,可以较容易的得到想要的效果。
毕业设计unity3d保龄球游戏怎么做
毕业论文,泛指专科毕业论文、本科毕业论文(学士学位毕业论文)、硕士研究生毕业论文(硕士学位论文)、博士研究生毕业论文(博士学位论文)等,即需要在学业完成前写作并提交的论文,是教学或科研活动的重要组成部分之一。
其主要目的是培养学生综合运用所学知识和技能,理论联系实际,独立分析,解决实际问题的能力,使学生得到从事本专业工作和进行相关的基本训练。
其主要目的是培养学生综合运用所学知识和技能,理论联系实际,独立分析,解决实际问题的能力,使学生得到从事本专业工作和进行相关的基本训练。
毕业论文应反映出作者能够准确地掌握所学的专业基础知识,基本学会综合运用所学知识进行科学研究的方法,对所研究的题目有一定的心得体会,论文题目的范围不宜过宽,一般选择本学科某一重要问题的一个侧面。
跳舞的线怎么自制关卡
业力1跳舞关卡怎么过
业力轮回1跳舞关卡过略心得分享:游戏中跳关确实是有bug比较麻烦而已还是可以操作的,首先要先把屏幕拉到最右边点那三个小凸起,就会移动,然后过去的时候注意金链子大佬头上有对话,给他花环(房子里右上灯泡的产物)他就会给你一个灯泡点房子即可移动,通关。
要多试几次对话比较难。
我想自学游戏设计,我很有决心。
我该怎么做呢
拜托行业老手们讲一些入行的心得或者说是如何起步的经验。
现在的大部分mmo游戏都有了自动寻路功能。
点击场景上的一个位置,角色就会自动寻路过去。
中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。
使用Unity来开发手游,自动寻路可以有很多种实现方式。
最近,一名海外开发者在博客中分享了自己用Unity引擎重做此前研发的Flash游戏寻路导航的心得,希望可以给大家带来帮助:大家好,最近我一直都在忙于把2006年的一款Flash游戏用Unity引擎重做出来,尽管我们在《Arrival in Hell》这个项目已经工作了一年多,但这里我希望从头开始来写开发者博客,因为这样才能让读者们有比较完整的印象。
如果你们不太熟悉这款游戏的话,我这里做几句话的介绍,我们在对2006年我和朋友Eduardo Mojica以及Richard Rout三人研发的一款Flash游戏进行重做,这是一款点击式操作的冒险游戏,我们将用Unity引擎进行重做。
我做编程和研发游戏已经有十年左右的经验,但这是我使用Unity引擎做的首款游戏。
在其他事情之前,我首先想要说的就是玩家角色的移动,由于这款游戏现在是真正的3D,因此玩家角色需要在3D空间里寻路。
幸运的是,Unity引擎已经有了一些不错的内置寻路功能,你只要打开窗口-导航(Navigation),选择你想要使用的物体并且放到路径中,然后把他们标记为‘导航静态(Navigation static)’这就会告诉Unity这些物体是静态的(非移动),在寻路的时候应该被考虑进去。
把物体设置为‘导航静态’这里我想要说一说这个功能有多么强大。
过去,我和大多数的游戏开发者一样,都必须打造自己的寻路系统,我之前就做过一个A*tile和基于节点的寻路系统,在两种情况下,特别是基于节点系统的寻路所产生的walls让人非常头痛。
在基于节点的寻路系统中,你必须手动地把AI使用的点在两者之间进行导航。
Unity不仅做导航功能,还使用了导航网格(Navigation meshes),这比手动放置节点更有效率而且更流畅。
更重要的是,你还可以一键重新计算整个导航网格,彻底摆脱了手动修改导航节点的做法。
我用基于节点系统做的失败的寻路系统之一在把静态物体加入了导航网格之后,你可以选择一系列的设定然后点击bake按钮,比如在考虑加入一堵墙之前确定坡有多陡以及台阶应该多高。
这样你就可以获得可以预览的视图。
值得注意的一件事是,不要仅仅因为物体存在在场景中就意味着它是导航网格的一部分。
比如说在这款游戏中,我不在乎玩家们是否会踩到瓦砾,所以我并没有把任何瓦砾标识为导航静态,这加快了当行网格的生成速度。
《Arrival in Hell》中其实是有数值的在导航网格生成之后,我简单地给玩家模型增加了一个NavMeshAgent组件,这款游戏现在就可以进行寻路了,唯一剩下的就是增加鼠标输入控制NavMeshAgent的目的地。
用NavMesh做的bakeNavMeshAgent设定为了告诉NavMeshAgent导航我做了以下指令:1.注意听取鼠标输入2.把鼠标放进屏幕空间3.把屏幕空间转变成来自摄像头的一束光4.在光达到地面的时候把它移除5.把NavMeshAgent的目的地设定到地板的对应位置。
C#代码是这样的:可视化视图下的目的地与路径这就解决了我这款游戏的大多数导航需求,唯一的例外就是导航网格由于游戏内的一些活动而发生改变的时候。
比如第一个房间的们最开始是关闭的,后来当它打开的时候,当行网格需要更新反映此次变化,允许玩家从新开的们中走过去。
我并没有在游戏运行的时候rebake完整的静态导航网格,而是使用了NavMeshObstacle组件,该组件可以让你把寻路过程中的动态物体加进去,如果物体移动,Unity的寻路算法就会根据实际情况而更新。
导航路径会根据NavMeshObstacle的变化而自动发生改变可视化视图所以,游戏寻路导航就这么做好了,这就是《Arrival in Hell》游戏中的导航工作原理,这一些只需要Unity内自带的导航功能就可以完成了。
高中学历去火星时代用心学unity3d能就业吗上海工资大概多少
培训机构现在就是3分培训,7分包装。
前几年确实好用,现在不一样了。
真想学就踏踏实实的跟着学,学完后找一个愿意培养你的公司学习(如果可以的话最好直接去公司学),不要太在乎工资,毕竟你这么学完也不一定能胜任工作。
独立游戏开发如何入门?
对于一个大一的学生来说,目测你的基础已经不错了,坚持努力下去应该会有不错的成就。
独立游戏是个很大的话题,首先先明确想要自己一个人做还是找小团队一起合作。
自己一个人做的话,设计、程序、美术、音乐等等就都得会。
如果组团队做,可以重点攻坚其中1到2个方向。
我主要说说技术方面。
你在编程方面已经有所积累,至少算法方面应该是吧,这对于编程来说是个不错的开始。
开发游戏的话,对基本的数据结构和算法要求还是很高的,再有就是软件结构的设计,这个需要较长时间的积累,最好多看看其他的游戏类工程是怎么做的,游戏和那种业务流软件的一个不同在于,游戏程序对实时性要求很高,会有一些为了性能而出现的不同的代码模式。
最基本的一个东西,编程语言,看你希望的开发平台,不同平台会使用不同的开发语言,这个要熟练掌握(不是能写算法、玩具例子那么简单就行,需要知道如何用这种语言开发大型工程)。
关于开发平台,多说两句。
如果想要自己的程序便于大家在任何平台使用,推荐Web相关的技术,如HTML5\\\/JavaScript(用canvas元素,如果需要GPU加速的底层3D API,canvas有WebGL绘制环境(OpenGL ES 2.0的浏览器版))。
如果希望更方便开发,Unity3D是个很好的选择,是个集游戏引擎与运行平台于一体的东西,而且这个东西牛逼的地方在于所有平台都支持(PC、Mobile、Web)。
如果开发手机上的原生app,推荐学习cpp以及那个平台上官方语言,这样可以用cpp开发,然后用官方语言做一个壳。
如果是PC上的游戏,还是推荐cpp。
另一个就是数学\\\/物理,当然这个要看你要做什么游戏。
基本的东西是几何相关的东西,基本上是个游戏都用得到。
如果有不确定性(绝大部分游戏应该都需要)在里面,基本的概率分布要深刻的理解。
如果要自己做物理效果(碰撞,弹性,形变等),除了需要搞定相关的物理(刚体物理,柔体物理(这个通常很麻烦),流体物理(这个也很麻烦)等),还需要搞定数值计算方法,自己做物理这个水很深,不建议自己做,用现有的物理引擎最好。
如果想要做到很好的3D画面,还需要学习计算机图形学,这里会有很多的光学,很多的立体几何,一坨线性代数的东西还有各种形式的积分。
而且实时图形系统的开发对编程能力要求也非常高,除了普通程序的要求以外,还要能掌握高性能的数值密集型的代码开发(这个对于物理相关的开发也一样)。
另外还需要掌握至少一个GPU加速的图形接口的使用(OpenGL,Direct3D等)以及对应的shader代码的编写。
同样,如果想做到很好的画面效果,建议用现有的渲染引擎,自己做水也太深。
总体上来说,2D游戏和3D游戏所需的技能还有很大差别,2D游戏在技术上的要求相对简单很多。
还有就是,独立游戏可能有服务器端得比较少。
如果真的需要,这方面的开发相对来说和通常的业务流软件的服务端比较相似,所以不是太复杂。
不过会有很多游戏逻辑需要在服务端处理,多客户端的信息实时同步可能会成为一个比较有难度的问题。
还有就是各种客户端请求的验证,反作弊用,这个一开始应该不会涉及到,不扯了。
总的来说,游戏开发作为程序开发最难的一种形式之一,技术方面需要非常多的积累,这个需要时间去积累。
可以先从那种非常小的小游戏(先是扫雷、贪食蛇这类休闲游戏,然后做塔防类游戏不错……)做起,练手用。
基本功扎实了以后可以考虑进入3D。
游戏美术方面呢,2D和3D也是很不一样的。
3D游戏的美术很复杂,各种模型网格的创建,各种贴图纹理的绘制。
如果有人物,还需要人物动画,这又是一大块。
美术我不专业,不多说了,希望哪位专业的来补充一下。
2D的相对好很多,只要能画好画,基本上就能做了。
游戏音乐方面,主要是作曲,用mid的话也不错,但现在好像这么做的很少了。
演奏要看作的曲子的复杂度了。
除了音乐还有音效,这个我不懂,不说了。
设计嘛,这个是制作游戏的核心。
从你的表述来看,应该是玩过不少游戏了,那应该多少能体会到各种游戏的设计模式。
把自己的想法,参考现有的一些模式,规划好,做出来原型。
设计这里有一个很重要的细节:开发工具要能尽可能提供高效的迭代方式,游戏的完成度是一点一点打磨出来的,而这个打磨过程的长短很大程度上取决于工具是否好用。
满意请采纳
想学习VR,但是纠结的是vr培训出来后就业前景如何?
“VR公司热”带旺人才需求转型的多,科班出身几乎没有VR\\\/AR已经站在最强风口上,房地产、教育、旅游、军事、娱乐等领域纷纷向VR抛出橄榄枝,虚拟现实已经不再局限于某个行业了。
2016年被称为VR产业元年。
目前VR这个词在百度的搜索指数每天有3万多次,而手机每天搜索量是5万多次。
在用户的关注度上,VR已经在赶超手机了。
用户越关心什么,就代表什么最受当下的欢迎。
VR热带动了强烈的人才需求,VR团队也在急剧扩张。
据了解,VR某企业科技从2012开始研发VR沉浸式头盔,当时只有3个人,也没拿任何薪水搞研发。
到去年6月份开始以淘宝众筹的方式试水VR头戴显示器市场,一举打开了销路,企业的规模也迅速扩大。
目前已经有75名员工,其中技术人员就50多人。
尽管他们近来多次高校进行招聘,但真正符合公司要求的人才,特别是优秀人才的缺口很大。
按照目前的研发需要,公司还得扩充将近一倍的技术人员。
VR是一门对技术非常严苛的新型科技,核心技术人才分为图形图像、输入算法、交互、光学等,能熟练将这几项技术运用在VR上当然少之又少。
同时这行又是刚刚兴起,许多VR技术员都是从游戏、动漫、3D仿真、模型等行业转型而来,真正科班出身的几乎没有。
行业技术的差异性,很难让技术人员自然地与VR领域相连接。
VR行业薪水差异很大VR行业热,人才稀缺,也使得这个行业人才薪资水涨船高。
“无论是技术、产品、设计,还是运营、市场等岗位,VR行业的薪水较互联网全行业,均有一定的优势。
以技术岗位为例,全行业薪水平均为13500元\\\/月,而VR平均薪水可达18500元\\\/月。
”业内专业人士透露说。
当然,掌握比较核心技术和入职菜鸟的技术人员月薪相差也很大。
在招聘过程中薪水很难定价,那些从3D游戏、动漫转型而来的人员素质参差不齐,一般在人才市场刚入VR技术门槛的求职者,他们的开价都比较谨慎,每月在六千元左右(含五险一金),这导致那些对VR行业期望值很高的人心理落差大,入职的可能性就很小。
现在在公司搞研发的,基本上都是朋友介绍、有一定研究经验的,月薪都在1万元以上;研发能力强的月薪可达1.5万元以上。
刚入职的月薪基本上在五六千元左右,然后慢慢涨薪。
而那些掌握核心技术的人才,比如会构建图形图像、输入算法、交互等技术的,月薪肯定是很高的,至于具体数字则属于商业机密。



