有没有关于unity3d fps游戏教程的教程

没玩过是遗憾 盘点九大FPS游戏的王者之作_电视游戏-新闻_新浪游戏_新浪网
没玩过是遗憾 盘点九大FPS游戏的王者之作
16:28:19& &来源:
  自从1993年世界上第一款FPS游戏《毁灭战士》诞生以来,热血快节奏的FPS游戏逐渐发展成为最受玩家欢迎的游戏类型,没有之一,在这十多年的发展中,玩家们迎来了许多具有深远影响的FPS游戏,毫不夸张的说,它们的出现不但改变了游戏业界,甚至影响了主流文化,成为了许多人生命中不可或缺的组成部分,今天小编就带来在FPS游戏史上堪称王者的十款游戏,看看你玩过其中几款呢?
  一、单机之王---《使命召唤》
  小编把《使命召唤》系列游戏称之为“单机之王”相信各位玩家对此不会有太多异议,有哪个玩家会没玩过“枪枪枪”的《使命召唤》系列呢?当初Activision推出《使命召唤》系列游戏的目的其实很简单,就是为了同EA的《荣誉勋章》系列分一杯“二战题材”的羹。
FPS游戏中的王者之作
  作为后期之秀的《使命召唤》,在很短时间内就成了最受玩家欢迎的二战题材游戏之一,与EA的《荣誉勋章》系列几乎不分上下。但真正奠定“单机之王”宝座的还是动视于2007年推出那款游戏。小编依稀记得吃老本的EA在同年信心满满的推出主打二战题材的FPS游戏《荣誉勋章:空降神兵》,准备甩开膀子准备捞钱的时候,对手动视却发售了基于现代反恐战争题材的《使命召唤4现代战争》,后来?就没有什么后来了!
FPS游戏中的王者之作
  《使命召唤》全系列至今销量突破一亿,销售额达数十亿美金,全球最高同时在线玩家超过六百万,活跃玩家超过四千万。。。还用小编继续说下去吗?要剧情有剧情,要销量有销量,这就是单机之王——使命召唤!
  二、画面之王---《孤岛危机》
  每当提到某款游戏的画面,许多玩家下意识的反应就是“不如《孤岛危机》”,《孤岛危机》这款游戏的画面已经在潜移默化中成为衡量一款游戏画面如何的业界标杆。
FPS游戏中的王者之作
  怀念那些美好的日子吗?每个人的电脑上都有一块看起来很不错的显卡,有的能流畅播放高清电影、有的能全特效玩转《魔兽世界》,有的能双开《欢乐斗地主》。但是忽然有一天这一切就结束了,因为一家叫Crytek Studios的游戏公司推出了一款名为《孤岛危机》的游戏。这款游戏上市后,所有民用级显卡立即被秒杀,即便是当时拥有“卡皇”称号的8800GTX在最高画质下也难以驾驭,为此许多玩家不行砸锅卖铁,只为换一块能顺利进入游戏的显卡,时至今日仍有不少玩家的电脑难以全特效玩转这款07年发售的游戏。
FPS游戏中的王者之作
  《孤岛危机》的出现不但让PC游戏在画质上产生了一个质的飞跃,更让全平台的玩家们对电脑游戏的画质有一个震撼般的认识,似乎它所代表的已经不单纯只是一款游戏这么简单的概念,更重要的是它让视频游戏跨越到下一个时代的水平,画面之王——《孤岛危机》,毫无争议。
新浪声明:新浪网登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
不知道大家有没有这样一种感觉,就是这几年来,尤其是最近,越来越多的游戏都向“沙盒”和“开放世界”靠拢。今天为大家带来的就...
来自:电视游戏-新闻
伴随着无数经典游戏系列诞生的同时,也有很多作品慢慢消失在历史长河中。今天来为大家整理那些历史悠久并流传至今的经典游戏系列...
来自:电视游戏-新闻
过了2000年后,PC与各类主机逐渐兴起,街机店纷纷倒闭,到目前为止街机已经基本灭绝。现在只能在一些大型电玩城里才能看到街机的...
来自:电视游戏-新闻
游戏带来的代入感的优势并非没有风险的——尤其是当游戏足够复杂而有深度,或者游戏以一段未完成、并且没有经过充分解释的故事情...
来自:电视游戏-新闻
中国网络游戏排行榜(China Game Weight Rank)是由新浪游戏推出的目前国内最全面、最专业、最公正的最新网络游戏评测排行榜,涵盖2010至今内所有新游戏,力图为中国游戏玩家打造最值得信赖的新网游推荐平台。
新浪中国网络游戏排行榜是以由新浪游戏专业评测员组成的评测团队为核心,以游戏的画质、类型、风格、题材等游戏特性为依据,对中国(大陆港澳台)、欧美、日韩等地区正在进行测试或正式运营的新网游产品进行评测并打分后产生的权威游戏排行榜。新浪中国网络游戏排行榜将网络游戏从六大项、二十八个小分项与同类游戏进行横向比较,再将该游戏与自身的不同版本进行纵向对比后,由评测中心根据加权平均数得出最后的游戏分数,并以游戏测试及上线时间点为分组,根据每款游戏的CGWS分数在每个季度发布排行榜榜单,实现了排行榜的透明化和实时化,帮助玩家准确、迅速地找到心目中的理想游戏。
评天下游戏、测产品深浅—新浪中国网络游戏排行榜CGWR! 
本周进行测试的游戏共有10款,其中《上古世纪》国服不限号测试周二开启,《新流星搜剑录》周三开启首轮技术测试。
游戏圈女神多娇又爱玩 来看一周游戏美女汇总!
更多资讯、攻略、视频,尽在新浪游戏《合金装备V:幻痛》游戏专区。
小编辛辣点评本周荐满分好评作合金装备5,吐槽新流星搜剑录。
《空甲联盟》是一款快节奏的动作即时策略游戏,爱解说带你抢先看。
国产ACT单机作《御天降魔传》正式版独家试玩解说,各模式揭秘。
《诛仙世界》8月18日开测,海量内容独家爆料。
用微信扫描二维码
分享至微信朋友圈深圳汇众动漫游戏学院
当前位置: & 正文
有关Unity3D FPS射击游戏官网中级教程
第二部分:进阶这部分是中级教程,介绍游戏中类似多武器切换、毁伤和敌人等。前提条件这部分教程假设你已经熟悉Unity基本操作和基本的脚本概念。同时,你对第一部分的内容也已经熟知。关卡设置下载Fps_Tutorial.zip,解压,Unity中打开工程文件夹。如果你已经完成了第一部分教程那么把文件解压到新的文件夹下面。导入标准资源包把mainLevelMesh和FPS controller预制增加到场景中注意:这部分教程中无需创建新脚本。我们使用下载的那些脚本。武器切换在涉及如何创建个别武器之前,我们需要写一些代码来控制武器如何出现和如何切换。我们来看看脚本PlayerWeapons的内容:function Awake(){// Select the first weaponSelectWeapon(0);}这段程序初始化0号武器作为默认武器。function Update(){// Did the user press fire?if (Input.GetButton ("Fire1"))BroadcastMessage("Fire");if (Input.GetKeyDown("1")){SelectWeapon(0);}else if (Input.GetKeyDown("2")){SelectWeapon(1);}}这段程序检测键盘输入:开火键、数字“1”代表1号武器、数字“2”代表2号武器。武器都要设为主摄像机的子物体。function SelectWeapon(index : int){for (var i=0;i&transform.childCi++){// Activate the selected weaponif (i == index)transform.GetChild(i).gameObject.SetActiveRecursively(true);// Deactivate all other weaponselsetransform.GetChild(i).gameObject.SetActiveRecursively(false);}}这段是根据键盘输入激活相应的武器。下面来使用上面那些代码:创建一个空游戏物体(empty game object),命名为“武器”,把它拖放到主摄像机下设为主摄像机的子物体(FPS controller中的摄像机)。我们的武器都将设为这个空物体的子物体。把脚本PlayerWeapons赋予摄像机下的游戏物体“武器”下面来创建第一个武器火箭发射器这部分来讲讲如何制作类似火箭发射器的武器。发射器火箭发射器用来产生一枚火箭弹并给它一个初速度。火箭弹发射的方向为角色指向的任意方向,并且它将在与其它任意碰撞器发生碰撞时爆炸。增加一个空游戏物体,命名为“RocketLauncher”。把这个空游戏物体的位置移动到FPS Controller大概手部的位置。层级栏中,把RocketLauncher拖放到主摄像机下作为主摄像机的子物体。这样的话,可以使发射器的发射方向与摄像机一致,同时发射器的移动也与FPS Controller一致了。工程栏中,点击Object文件夹下的发射器,在参数设置面板中,把FBXImporter下的Scale Factor设置为1,否则模型在场景中不是真实大小,会非常小。把Object文件夹下的模型物体rocketLauncher拖放使其成为游戏物体RocketLauncher的子物体。发射器的脚本RocketLauncher内容如下:var projectile : Rvar initialSpeed = 20.0;var reloadTime = 0.5;var ammoCount = 20;private var lastShot = -10.0;function Fire (){// Did the time exceed the reload time?if (Time.time & reloadTime + lastShot && ammoCount & 0){// create a new projectile, use the same position and rotation as the Launcher.var instantiatedProjectile : Rigidbody = Instantiate (projectile,transform.position, transform.rotation);// Give it an initial forward velocity. The direction is along the z-axis of// the missile launcher's transform.instantiatedProjectile.velocity = transform.TransformDirection(Vector3 (0, 0, initialSpeed));// Ignore collisions between the missile and the character controllerPhysics.IgnoreCollision(instantiatedProjectile.collider, transform.root.collider);lastShot = Time.ammoCount--;}}这段代码确保了物体发射速度不大于reloadTime(加载时间)。它同时还使玩家在弹药数量足够的条件下才能开火。这里火箭发射的行为定义,有些类似前面基础教程,除了这里有发射加载时间和弹药限制。把脚本RocketLauncher赋予给RocketLauncher游戏物体。不能把脚本赋予给RocketLauncher游戏物体的子物体(模型物体)!火箭弹现在我们在场景中创建一个火箭弹并放置一个预制体中(Prefab)。工程栏中的Object文件夹下点选rocket,在FBXImporter中设置ScaleFactor为1,否则模型导入到场景中会非常小。把rochet物体拖放到场景中。赋予Rocket脚本。给模型rocket增加一个box collider,调节box碰撞器大小,使其比火箭弹模型稍微大一点点即可,避免穿透错误。穿透错误是由于游戏物体大小很小、速度很快,导致碰撞监测不能计算与它的碰撞从而发生了穿透现象。在Z轴向调节box碰撞器大小,使它能有效响应。在火箭弹物体刚体属性选项中,不勾选“Use Gravity”。这样火箭弹不会受重力影响。创建一个粒子系统:GameObject-Greate Other-Particle System设定Ellipsoid中x,y,z为0.1设定Rnd Velocity中每个轴向值设为0.1粒子发射器Min Size和Max Size都设为0.5粒子数改为100(Min和Max Emission)把Effects下smoke拖放到粒子系统中在粒子动画器部分,设定World Rotation Axis值为0.5设置变量Size Grow为3开启粒子系统中Autodestruct选项,这个可以实现火箭弹毁灭后粒子系统也随之消失。层级面板中,把粒子系统拖拽使其成为火箭弹的子物体。重置粒子系统transform使其位于火箭弹中央,然后再把它的位置设在火箭弹尾部。在层级栏中选择火箭弹,在场景中四处移动下,看看尾部是否有烟状尾迹。现在一个带尾迹的火箭弹就制造完毕了,下面可以把火箭弹设定为预制体了。首先创建一个空预制体(Prefab)来加载火箭弹,命名为“Rocket”层级栏中选择火箭弹,拖拽至新的“Rocket”预制体工程栏中创建一个新文件夹,命名为“WeaponPrefabs”,用来存放武器预制物体。火箭弹脚本Rocket内容如下:// The reference to the explosion prefabvar explosion : GameOvar timeOut = 3.0;// Kill the rocket after a while automaticallyfunction Start () {Invoke("Kill", timeOut);}函数Kill作用如下,首先找到子层级下的粒子发射器,关闭发射状态。然后,分离被赋予脚本的物体(这里的火箭弹)的任何子物体(例如这里的烟雾尾迹粒子系统)并销毁火箭弹。function OnCollisionEnter (collision : Collision) {// Instantiate explosion at the impact point and rotate the explosion// so that the y-axis faces along the surface normalvar contact : ContactPoint = collision.contacts[0];var rotation = Quaternion.FromToRotation(Vector3.up, contact.normal);Instantiate (explosion, contact.point, rotation);// And kill our selvesKill ();}function Kill (){// Stop emitting particles in any childrenvar emitter : ParticleEmitter= GetComponentInChildren(ParticleEmitter);if (emitter)emitter.emit =// Detach children - We do this to detach the trail rendererer which// should be set up to auto destructtransform.DetachChildren();最重要程序的是这句transform.DetachChildren(),它就是预先销毁game Object(这里的火箭弹),这样当火箭弹炸毁时,它的尾迹就不再是它的子物体了。// Destroy the projectileDestroy(gameObject);}@script RequireComponent (Rigidbody)命令@script确保对被赋予脚本的物体添加一个刚体属性(脚本使用对象要求是刚体)。一旦火箭弹与另一个带碰撞器的物体发生碰撞,我们希望销毁火箭弹物体。但是如果尾迹是直接关联在火箭弹上面的话,尾迹也会同时被销毁,烟雾会立即消失。因此,就要在销毁火箭弹之前分离子物体尾迹粒子系统。注意,火箭弹是通过两种方式来销毁,一种是发射后超过3秒自动销毁,二是发生碰撞销毁。选择火箭发射器把武器预制文件夹下的火箭弹拖拽放置火箭发射器Projectile参数栏中运行游戏,当发射火箭弹时,它的尾部应该有一道尾迹了爆炸(Explosions)你可能已经注意到了,发射的火箭弹发生碰撞时并没有爆炸产生。下面我们来添加爆炸效果。把标准资源包中粒子文件夹下的Small Explosion拖拽给火箭弹预制的外部变量Explosion我们仍然需要定义爆炸的行为,脚本Explosion-Simple内容如下:var explosionRadius = 5.0;var explosionPower = 10.0;var explosionDamage = 100.0;var explosionTime = 1.0;function Start () {var explosionPosition = transform.var colliders : Collider[] = Physics.OverlapSphere (explosionPosition,explosionRadius);返回球半径内碰撞器数列for (var hit in colliders) {if (!hit)if (hit.rigidbody){hit.rigidbody.AddExplosionForce(explosionPower,explosionPosition, explosionRadius, 3.0);这部分对爆炸半径内的所有刚体属性物体一个向上的作用力这样会使爆炸效果看上去很棒!var closestPoint = hit.rigidbody.ClosestPointOnBounds(explosionPosition);var distance = Vector3.Distance(closestPoint, explosionPosition);// The hit points we apply fall decrease with distance from the hit pointvar hitPoints = 1.0 - Mathf.Clamp01(distance / explosionRadius);hitPoints *= explosionD这部分计算爆炸对每个刚体属性物体造成的毁伤程度。并且毁伤程度随着距爆炸中心地距离而减少。// Tell the rigidbody or any other script attached to the hit object// how much damage is to be applied!hit.rigidbody.SendMessageUpwards("ApplyDamage", hitPoints,SendMessageOptions.DontRequireReceiver);这部分是对刚体物体传递一个伤害信息。}}// stop emitting ?if (particleEmitter) {particleEmitter.emit =yield WaitForSeconds(0.5);particleEmitter.emit =}// destroy the explosionDestroy (gameObject, explosionTime);}把脚本Explosion-Simple付给Small Explosion预制体这个爆炸脚本可以应用在任何需要爆炸效果的游戏中,要得到特定的效果,只需修改下面几个参数即可:explosionPower:爆炸威力,移动炸点周围物体的力的大小。explosionDamage:爆炸造成的毁伤点数。explosionRadius:爆炸效果范围大小。这个爆炸脚本与先前初级教程中的那个脚本非常类似,主要的区别就是有了毁伤点数这部分内容。通过变量explosionDamage设置基于距离远近的毁伤点数,外部边缘的物体毁伤程度小于爆炸中心位置的物体。这意味着现在一个爆炸可以对炸点周围的物体造成伤害。后面我们将讨论如何应用毁伤点数。运行游戏机枪(Machine Gun)类似机枪这样的武器,发射速度比火箭筒快,但造成的伤害小。创建一个空游戏物体,命名为“机枪”。层级栏中,把这个物体拖放设为“武器”的子物体。把(Object/weapons/machineGun)机枪模型增加到“机枪”空游戏物体中。把脚本MachineGun赋予“机枪”游戏物体。在机枪物体参数栏的变量Muzzle Flash栏中把muzzle_flash(机枪的子物体)付给这个变量。机枪的脚本如下MachineGun:var range = 100.0;var fireRate = 0.05;var force = 10.0;var damage = 5.0;var bulletsPerClip = 40;var clips = 20;var reloadTime = 0.5;private var hitParticles : ParticleEvar muzzleFlash : Rprivate var bulletsLeft : int = 0;private var nextFireTime = 0.0;private var m_LastFrameShot = -1;function Start (){hitParticles = GetComponentInChildren(ParticleEmitter);// We don't want to emit particles all the time, only when we hit something.if (hitParticles)hitParticles.emit =bulletsLeft = bulletsPerC}函数Start其实就是用来初始化粒子发射器的(bullet spark),设定它开始时为关闭状态。function LateUpdate(){if (muzzleFlash){// We shot this frame, enable the muzzle flashif (m_LastFrameShot == Time.frameCount){muzzleFlash.transform.localRotation =Quaternion.AngleAxis(Random.Range(0, 359), Vector3.forward);muzzleFlash.enabled =if (audio){if (!audio.isPlaying)audio.Play();audio.loop =}}// We didn't, disable the muzzle flashelse{muzzleFlash.enabled =enabled =// Play soundif (audio){audio.loop =}}}}执行Update函数后,会自动执行LateUpdate函数。注意,Update函数是在脚本PlayWeapons中调用的,这个脚本配置给了Weapons游戏物体(机枪的父物体)。一般而言,当你想某些效果是在Update函数中调用而相应的效果出现在LateUpdate函数中,就使用LateUpdate函数。例如这个例子,判断玩家“是否开火”(if firing)是在Update函数中,在LateUpdate函数中应用火花效果(muzzle flash)。function Fire (){if (bulletsLeft == 0)// If there is more than one bullet between the last and this frame// Reset the nextFireTimeif (Time.time - fireRate & nextFireTime)nextFireTime = Time.time - Time.deltaT// Keep firing until we used up the fire timewhile( nextFireTime & Time.time && bulletsLeft != 0){FireOneShot();nextFireTime += fireR}}Fire函数是基于机枪发射速度来判断玩家是否能开火。function FireOneShot (){var direction = transform.TransformDirection(Vector3.forward);var hit : RaycastH// Did we hit anything?if (Physics.Raycast (transform.position, direction, hit, range)){// Apply a force to the rigidbody we hitif (hit.rigidbody)hit.rigidbody.AddForceAtPosition(force * direction, hit.point);// Place the particle system for spawing out of place where we hit the surface!// And spawn a couple of particlesif (hitParticles){hitParticles.transform.position = hit.hitParticles.transform.rotation =Quaternion.FromToRotation(Vector3.up, hit.normal);hitParticles.Emit();}// Send a damage message to the hit objecthit.collider.SendMessageUpwards("ApplyDamage", damage,SendMessageOptions.DontRequireReceiver);}bulletsLeft--;// Register that we shot this frame,// so that the LateUpdate function enabled the muzzleflash renderer for one framem_LastFrameShot = Time.frameCenabled =// Reload gun in reload Timeif (bulletsLeft == 0)Reload();}函数FireOneShot运行时,会在FPS控制器前方发射出一条射线来判断子弹是否击中了什么东西。我们将把子弹的射击距离限定在一定范围内。如果射线射到某个刚体物体上,就会在那个点上对这个刚体物体产生一定的作用力(因为是机枪,所以作用力很小)。然后在这个点的位置再产生一个火花。粒子发射器方向也会变为沿着这个点的法线方向。然后,通过对被击中的物体发送一个毁伤信息来对它应用毁伤效果。function Reload () {// Wait for reload time first - then add more bullets!yield WaitForSeconds(reloadTime);// We have a clip left reloadif (clips & 0){clips--;bulletsLeft = bulletsPerC}}function GetBulletsLeft () {return bulletsL}函数Reload是来装载一个弹夹(还有弹夹的话)。装载时间可以在参数栏中进行调节。设置粒子发射器(Configuring the particle emitter)机枪在其子弹与其他刚体物体发生碰撞时应该有个小火花的效果,下面我们来创建它:从Standard Assets/Particales文件夹下,把Sparks预制拖放到层级栏中,使其成为machineGun的子物体(不是MachineGun)搞定!运行游戏。不要忘了1和2是切换武器的。生命值(Hit Points)脚本Explosion和MachineGun已经展示了当物体被击中时(火箭弹或子弹),如何设定毁伤程度,并把伤害值传给周围的游戏物体。但是,游戏物体并不知道这些值意味着什么。游戏物体的健康程度可以通过使用变量hitPoints来进行跟踪。每个物体都有自己的生命值(根据物体自身的生命强度)。每个游戏物体也应该对伤害有所反应并使用了ApplyDamage()函数(注意,这正是Explosion和MachineGun脚本中调用的用来产生伤害函数)。这个函数将会根据伤害程度降低游戏物体的生命值,并在生命值为零时调用其它函数来产生一定的变化(例如死亡或爆炸)。下一节我们来看看如何使用生命值(hitPoints)和函数ApplyDamage()爆炸的桶子(Exploding Barrels)下面的脚本是通用脚本,所以可以作为一个部件加载在任何可以产生毁伤的物体上。DamageReceiver脚本代码如下:var hitPoints = 100.0;var detonationDelay = 0.0;var explosion : Tvar deadReplacement : Rfunction ApplyDamage (damage : float){// We already have less than 0 hitpoints, maybe we got killed already?if (hitPoints &= 0.0)hitPoints -=if (hitPoints &= 0.0){// Start emitting particlesvar emitter : ParticleEmitter = GetComponentInChildren(ParticleEmitter);if (emitter)emitter.emit =Invoke("DelayedDetonate", detonationDelay);}}函数对被击中或被爆炸影响的物体应用毁伤效果。如果物体生命值已经是0或者更少,不会有任何效果,否则生命数值会根据毁伤效果不断减小。当生命值比零还小的时候就会调用DelayedDetonate函数(延迟只是为了爆炸效果更酷,没别的原因)。function DelayedDetonate (){BroadcastMessage ("Detonate");}这就是引爆游戏物体和其子物体的方法function Detonate (){// Destroy ourselvesDestroy(gameObject);// Create the explosionif (explosion)Instantiate (explosion, transform.position, transform.rotation);如果桶子上加载了爆炸预制,那么生命值为0是就会显示这个爆炸预制。// If we have a dead barrel then replace ourselves with it!if (deadReplacement){var dead : Rigidbody = Instantiate(deadReplacement, transform.position,transform.rotation);// For better effect we assign the same velocity to the exploded barreldead.rigidbody.velocity = rigidbody.dead.angularVelocity = rigidbody.angularV}如果游戏物体还有一个死亡状态,那么桶子爆炸,然后用这种死亡状态代替这个游戏物体。同时要注意方向的一致性。// If there is a particle emitter stop emitting and detach so it doesnt get destroyed// right awayvar emitter : ParticleEmitter = GetComponentInChildren(ParticleEmitter);if (emitter){emitter.emit =emitter.transform.parent =}}// We require the barrel to be a rigidbody, so that it can do nice physics@script RequireComponent (Rigidbody)下面我们在几个桶子上使用DamageReceiver脚本。先插入一些资源:拖放Objects/crateAndBarrel/barrel物体到场景中对桶子(barrel)添加刚体属性给桶子增加一个盒子碰撞器(box collider)。根据桶子大小调节盒子碰撞器大小。在盒子碰撞器参数栏中的Size中调节。层级栏中,把脚本DamageReceiver付给桶子把标准资源库中的explosion预制付给Explosion变量(在桶子的毁伤接收器属性中)创建一个新预制Barrel(注意大写B,插入的模型桶子名字是小写b)把设置好的桶子物体(barrel)从层级栏中拖放到工程栏中的新建的预制上增加几个Barrel到场景(直接复制即可)运行游戏你可能注意到,当桶子爆炸后,它仅仅就只消失了,我们还需要添加一个爆炸后的桶子的来代替它。创建一个新预制Barrel-dead把原始桶子物体付给预制(从文件夹Objects/crateAndBarrel中导入的)此时,桶子(Barrel)和爆炸后的桶子(Barrel-dead)看上去是一样的,因为他们的纹理一样(barrel1)我们需要炸后的桶子纹理跟桶子纹理不一样,这样玩家才知道爆炸没爆炸,类似烧毁的纹理。仅仅调节barrel1是不行的,必须创建一个新的材质付给Barrel-dead。首先复制材质barrel1,调节成烧毁的样子。工程栏中选择barrel1材质(点击Barrel-dead,在参数Mesh Renderer中点 Materials,然后工程栏中会高亮显示barrel1)复制材质barrel1(Ctrl+D),重命名为barrelDead。注意,复制的材质会自动命名为barrel2设定材质,在参数Main Color中把颜色调为黑色工程栏中选择Barrel-dead,材质栏中下拉菜单选择barrelDead比较两个材质的不同下一步,点选Barrel-dead,为其增加盒子碰撞器和刚体属性把Barrel-dead配置到Barrel的Dead Replacement参数中运行游戏,将会出现桶子爆炸前后不一样的效果防卫机枪(Sentry Gun)最后我们在游戏中增加一个敌人,一挺防卫机枪。防卫机枪将自动寻找玩家,并进行射击。首先插入机枪模型:把Object/weapons文件夹下的sentryGun物体拖放到场景中给机枪增加box collider和rigidbody属性调节下盒子碰撞器大小,使他包裹炮塔上机枪管把脚本DamageReceiver付给机枪现在我们来解释下防卫机枪的脚本代码。全代码如下SentryGun:var attackRange = 30.0;var shootAngleDistance = 10.0;var target : Tfunction Start () {if (target == null && GameObject.FindWithTag("Player"))target = GameObject.FindWithTag("Player").}函数Start检测是否给机枪赋予了一个目标物体(参数面板中可以设置),但在参数面板中把Player标签付给参数会更方便(马上来操作)。function Update () {if (target == null)if (!CanSeeTarget ())// Rotate towards targetvar targetPoint = target.var targetRotation = Quaternion.LookRotation (targetPoint - transform.position,Vector3.up);transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation,Time.deltaTime * 2.0);如果玩家在游戏中,并被防卫机枪发现,机枪炮塔将从当前角度旋转朝向玩家。// If we are almost rotated towards target - fire one clip of ammovar forward = transform.TransformDirection(Vector3.forward);var targetDir = target.position - transform.if (Vector3.Angle(forward, targetDir) & shootAngleDistance)SendMessage("Fire");}如果当前机枪管位置与玩家的夹角小于shootAngleDistance所设置的数值,机枪将开始开火。function CanSeeTarget () : boolean{if (Vector3.Distance(transform.position, target.position) & attackRange)var hit : RaycastHif (Physics.Linecast (transform.position, target.position, hit))return hit.transform ==}函数CanSeeTarget计算出机枪是否看见了目标(在这里是玩家)最后我们来完成对防卫机枪最后的设置:设置防卫机枪的目标。层级面板中点选FPS控制器,标签栏中的下拉菜单选择标签Player。把脚本SentryGun配置给防卫机枪的子物体sentryGunRotateY。这会使防卫机枪仅仅顶部旋转,三角基座固定不动。把爆炸预制配置给机枪中DamageReceiver属性中的爆炸栏把防卫机枪配置到DamageReceiver属性中的Dead Replacement栏(也可以配置一个自己创建的物体作为破坏状态物体)把脚本MachineGun付给sentryGunRotateY在资源库中,把sentryGunTop的子物体muzzleflash配置给机枪属性中的Muzzle Flash变量。层级栏中点选muzzleflash,把它的着色器类型改为Particles/Additive运行游戏。现在可以朝油桶和机枪开火了天空物体(Skybox)给场景添加天空效果。选择Edit&Render Settings。把skyBoxTest拖放配置给Skybox材质。这样就创建了天空
推荐阅读Recommended Reading
开班信息Class Information
就业指导Employment
学校详细地址:深圳市福田区深南中路华能大厦中区13楼
全国服务咨询热线
京ICP备号北京汇众益智科技有限公司 地址:北京市昌平区温都水城宏福大厦10层 电话:010-

我要回帖

更多关于 cffps飞秒教程 的文章

 

随机推荐