unity3d刚体 设置刚体的碰撞的相互作用

这几天为了准备面试,所以决定对平时学习中的盲点扫盲一下,首先想到的就是物理碰撞。以前没有好好研究过,一直模糊不清,到底什么条件下才可以产生物理碰撞呢?只要其中一个有Rigidbody就可以了吗?所以进行了下面的实验。
以下内容参考了。
----------------------------------------------------------------------------分割线--------------------------------------------------------------------------------
首先查找资料,发现Unity组件文档中将碰撞体分为了3个类型,如下所示。
Static Collider 静态碰撞器
These are GameObjects that do&not&have a Rigidbody attached, but&do&have a Collider attached. These objects should remain still, or move very little. These work great for your environment geometry. They will not move if a Rigidbody
collides with them.
指的是没有附加刚体而附加了碰撞器的游戏对象。这类对象会保持静止或者很轻微的移动。对于环境模型十分好用,当和刚体碰撞时而不会移动。
Rigidbody Collider 刚体碰撞器
These GameObjects contain both a Rigidbody and a Collider. They are completely affected by the physics engine through scripted forces and collisions. They might collide with a GameObject that only contains a Collider. These will likely be your primary type
of Collider in games that use physics.
指的是同时附加了刚体和碰撞器的游戏对象。通过脚本的力量和碰撞完全受物理引擎的影响。可以和只包含碰撞器的游戏对象碰撞。将会成为你游戏中使用物理效果的基本类型碰撞器。
Kinematic Rigidbody Collider 运动学刚体碰撞器
This GameObject contains a Collider and a Rigidbody which is marked IsKinematic. To move this GameObject, you modify its&&Component,
rather than applying forces. They're similar to Static Colliders but will work better when you want to move the Collider around frequently. There are some other specialized scenarios for using this GameObject.
指的是同时包含碰撞器和刚体,并且激活IsKinematic的一类游戏对象,要移动这类游戏对象,要修改它的Transform组件(指的是position和rotation这类属性),而不是用力。它们很像静态碰撞器,不过如果你想要不停地到处移动碰撞器,它们会更好用。这类游戏对象还有许多其他的独特使用情景。
运动学刚体碰撞器是个非常懒惰和霸道的家伙,它碰到其他碰撞器完全没有反应(其实还是有点反应,会触发一些碰撞函数的,后面有解释)。它不受力、重力或扭矩的影响。可以通过设置Transform 的position和rotation来准确的操作它们或者让它们动起来,但是,它们可以和其他的非运动学刚体互相作用。对于放在运动学刚体碰撞器上面的刚体,会受到运动学刚体施加的摩擦力。
还有一类叫做角色控制器。
Character Controllers 角色控制器
You use&&if you want to make a humanoid character. This could be the main
character in a third person platformer, FPS shooter or any enemy characters.
如果想制作一个类似人的角色那就使用角色控制器。这可以是第三人称平台游戏、第一人称射击游戏的主要角色或任何敌对角色。
These Controllers don't follow the rules of physics since it will not feel right (in Doom you run 90 miles per hour, come to halt in one frame and turn on a dime). Instead, a Character Controller performs collision detection to make sure your characters can
slide along walls, walk up and down stairs, etc.
这类控制器不遵循物理规则因此它感觉上不对劲(在Doom中,你跑到了90英里每小时,然后马上停下而且可以极快的转身)。不过,角色控制器执行碰撞检测以保证你的角色可以沿着墙滑动,上下台阶等等。
Character Controllers are not affected by forces but they can push Rigidbodies by applying forces to them from a script. Usually, all humanoid characters are implemented using Character Controllers.
角色控制器不受力影响(但是重力效果还是有的)但是可以被由代码施加的力推动。通常,所有类似人的角色都用角色控制器来执行。
Character Controllers are inherently unphysical, thus if you want to apply real physics - Swing on ropes, get pushed by big rocks - to your character you have to use a Rigidbody, this will let you use joints and forces on your character. Character Controllers
are always aligned along the Y axis, so you also need to use a Rigidbody if your character needs to be able to change orientation in space (for example under a changing gravity). However, be aware that tuning a Rigidbody to feel right for a character is hard
due to the unphysical way in which game characters are expected to behave. Another difference is that Character Controllers can slide smoothly over steps of a specified height, while Rigidbodies will not.
角色控制器本身不具物理特性,因此如果想应用真正的物理作用——在绳上摇摆,被大石头推动——到你的角色,必须用刚体,这会允许你把铰链或力用到你的角色上。角色控制器永远沿Y轴对齐,因此,如果你的角色需要在空间中改变方向那也必须用到刚体(比如在变化的引力控制下)。但是,要意识到调整一个刚体在角色上表现自然是很难的,因为游戏角色自身的非物理特性总想表现出来。另一个困难是,角色控制器可以从特定高度的台阶上平滑地滑下,而刚体不会。
The Controller does not react to forces on its own and it does not automatically push Rigidbodies away.
控制器不会对加在它自身上的力做出反应,也不会自动推开其他刚体。(这里我没有明白,因为我实验过在一个刚体内部实例化一个控制器,刚体是会被弹开的。如果有人懂请告诉我,不胜感激!)
If you want to push Rigidbodies or objects with the Character Controller, you can apply forces to any object that it collides with via the OnControllerColliderHit() function through scripting.
如果想让角色控制器推开其他刚体或者对象,你可以在对象附加的脚本中添加OnControllerColliderHit()函数,这样对它们施加力就能够产生碰撞。
也就是说,角色控制器可以使用物理效果影响其他对象,前提是你自己写了脚本。
On the other hand, if you want your player character to be affected by physics then you might be better off using a&&instead
of the Character Controller.
而角色控制器不能通过物理效果被其他对象影响。因此,如果你想让你的游戏角色被物理效果影响,那就最好使用刚体而不是角色控制器。
角色控制器和运动学刚体有点像,因为它们都不受力的作用(运动学刚体更像是一个刚体,只是不会受到其他任何外力的影响,就像是古代的国王,虽然和普通平民一样都是人,但是只能他欺负别人,别人无法欺负他;而角色控制器本身就不具有物理特性,不可以推开别人(除非写了自己的脚本),也不会被别人影响,只是它可以执行碰撞检测)。但是也有几点不同的地方。首先,运动学刚体是无法通过代码施加力的作用来推动,但是角色控制器是可以的。第二,运动学刚体不会受到重力的作用,而角色控制器是有重力效果的。其次,角色控制器只能沿Y轴旋转,也就是人永远都是直立状态,不会因为受到力的作用就趴下啦,而刚体是可以的。第三,角色控制器可以从特定高度台阶上平滑地滑下,而刚体不会。
说了这么多,晕了吧,恩,我也晕了。所以我们来做下实验!我们通过一个最简单的场景,即一个平行光、一个平面、两个正方体来试验一下。通过给两个正方体添加不同的碰撞体类型来观察是否会发生碰撞。
下面的实验中,一个正方体保持静止,另一个正方体我们通过代码来控制运动,即上下左右方向键可以控制它的上下左右运动。
移动的静态碰撞器VS静止的静态碰撞器
没有任何碰撞效果。这在意料之中,因为没有一个添加了Rigdbody属性,肯定不会碰撞啦!
移动的静态碰撞器VS静止的刚体碰撞器
没有任何碰撞效果。
这个结果有点意外,明明一个已经添加了Rigdbody,为什么还是无法发生碰撞呢?这是因为添加了Rigdbody的正方体是静止的,而静止的刚体会进入休眠。好吧,又遇到了新的名词,。例如,当一个正方体掉到地板上静止后就会进入刚体休眠。刚体休眠完全自动发生。只要刚体的速度低于sleepAngularVelocity和sleepVelocity,该刚体就会开始休眠。其空闲一些帧后,就会被设置成休眠状态。处于休眠状态中的物体,不会再对其进行碰撞检测和模拟。这会节约大量的CPU开销。这就解释了为什么我们这个实验里没有碰撞发生,因为它睡觉去了,而那个移动的静态碰撞器又无法唤醒它,所以它压根就不知道有人碰到了自己。这里又有一个问题了,那么什么情况下可以唤醒已经休眠了的刚体呢?有4中情况:
被施加了外力,也就是说在代码里使用了AddForce;刚体的属性发生了变化;和它通过关节连接的刚体发生了移动,因为连带关系,所以它也被唤醒了;被其他刚体碰撞器碰撞。但是,只有处于运动状态中的刚体(包括普通的刚体碰撞器和运动学刚体碰撞器)能唤醒休眠中的刚体,静态碰撞器不能唤醒休眠中的刚体。即如果你将一个静态碰撞器(没有和任何刚体绑定过)绑定到处于休眠中的刚体,或者将静态碰撞器抽离处于休眠中的刚体时,这个休眠中的刚体是不会被唤醒的。但是如果你将一个运动中的刚体从它所属的且处于休眠状态中的顶层刚体移出时,处于休眠中的刚体将会被唤醒,且会在图形更新里被重新正确的计算。
最后这句话时什么意思呢?我们再做两个实验好了。还是两个正方体,我们将一个正方体放在另一个的上方。
在两个实验里,上方的正方体都是普通的刚体碰撞器,而下方的正方体有所不同,我们可以通过代码移动下方的正方体使得它从上方正方体的下面移开。
第一个实验里,下方的正方体是一个静态碰撞器。当我们移开后,上方的正方体直直地下落,直到碰到地板,期间没有任何物理效果(除了重力效果)。
第二个实验里,下方的正方体是一个运动学刚体碰撞器。当我们移开下方正方体的过程中,我们会发现上方的正方体会受到摩擦力的左右而也发生了一定移动,当两个正方体完全分离后,上方的正方体晃动着掉到了地板上(因为之前受到了摩擦力)。
好了,有点明白了吗?静态碰撞器是不会唤醒休眠刚体的(第一个实验),而运动学刚体由于会对刚体产生力的作用而可以唤醒休眠中的刚体。
再提一个问题,如果上面的正方体是运动学刚体碰撞器呢?那么无论下面是什么碰撞器它都没有反应,因为它是国王啦,不受到任何外力的影响,包括重力!
移动的刚体碰撞器VS静止的静态碰撞器
有碰撞效果,具体为:对于移动的刚体碰撞器在遇到静态碰撞器后会产生物理效果,如反弹、无法前进等;对于静止的静态碰撞器,会产生轻微的碰撞效果,如轻微的晃动,但是不会移动。
移动的刚体碰撞器VS静止的刚体碰撞器
有碰撞效果,对于两个物体都出现正常的物理效果,如反弹等。
移动的静态碰撞器VS静止的运动学刚体碰撞器
没有任何碰撞效果。运动学刚体碰撞器是不受到任何外力作用的。
移动的运动学刚体碰撞器VS静止的静态碰撞器
没有任何碰撞效果。运动学刚体碰撞器是不受到任何外力作用的。
移动的运动学刚体碰撞器VS静止的刚体碰撞器
有碰撞效果,但仅刚体碰撞器有碰撞效果,如反弹等,运动学刚体碰撞器不受力的作用。
移动的刚体碰撞器VS静止的运动学刚体碰撞器
有碰撞效果,但仅刚体碰撞器有碰撞效果,如反弹等,运动学刚体碰撞器就像一堵墙一样一动不动。
移动的运动学刚体碰撞器VS静止的运动学刚体碰撞器
两个太上皇相见了会怎么样呢?没有任何反应……就像两个静态碰撞器一样。
下面,将一个正方体换成角色控制器,继续实验。
移动的静态碰撞器VS静止的角色控制器
没有任何碰撞效果。
移动的刚体碰撞器VS静止的角色控制器
有碰撞效果,刚体碰撞器遇到角色控制器后会发生反弹,无法继续前进,而角色控制器没有任何效果。
移动的运动学刚体碰撞器VS静止的角色控制器
没有任何碰撞效果,会互相穿过。
移动的角色控制器VS静止的静态碰撞器
没有任何碰撞效果,会互相穿过。
移动的角色控制器VS静止的刚体碰撞器
有碰撞效果,刚体碰撞器被弹开。
移动的角色控制器VS静止的运动学刚体碰撞器
没有任何碰撞效果,会互相穿过。
碰撞信息和触发信息
对于碰撞时是否会发出碰撞函数(或触发信息),可以见下表。碰撞信息是指OnCollisionEnter() OnCollisionStay()和 OnCollisionExit()这三个函数,而触发信息指的是OnTriggerEnter() OnTriggerStay和OnTriggerExit()三个函数。
Collision detection occurs and messages are sent upon collision
碰撞后有碰撞检测并有碰撞信息发出
Static Collider
静态碰撞器
Rigidbody Collider
刚体碰撞器
Kinematic&
Rigidbody Collider
运动学刚体碰撞器
Trigger Collider
静态触发碰撞器
Rigidbody&
Trigger Collider
刚体触发碰撞器
Kinematic Rigidbody&
Trigger Collider
运动学刚体触发碰撞器
Static Collider 静态碰撞器
Rigidbody Collider 刚体碰撞器
Kinematic Rigidbody Collider&
运动学刚体碰撞器
Static Trigger Collider
静态触发碰撞器
Rigidbody Trigger Collider
刚体触发碰撞器
Kinematic Rigidbody Trigger Collider
运动学刚体触发碰撞器
Trigger messages are sent upon collision
碰撞后有触发信息
Static Collider
静态碰撞器
Rigidbody Collider
刚体碰撞器
Kinematic&
Rigidbody Collider
运动学刚体碰撞器
Trigger Collider
静态触发碰撞器
Rigidbody&
Trigger Collider
刚体触发碰撞器
Kinematic Rigidbody&
Trigger Collider
运动学刚体触发碰撞器
Static Collider 静态碰撞器
Rigidbody Collider 刚体碰撞器
Kinematic Rigidbody Collider
运动学刚体碰撞器
Static Trigger Collider 静态触发碰撞器
Rigidbody Trigger Collider
刚体触发碰撞器
Kinematic Rigidbody Trigger Collider
运动学刚体触发碰撞器
根据脚本手册里写的,若要能够接收触发信息,两个碰撞器中必有一方含有刚体而至少一方是触发器。上表也不一定完全正确,在我的经验里,那些意外状况大概是因为刚体休眠造成系统没有检测。例如,上表中的第四行,当移动的静态触发碰撞器依次和静止的刚体碰撞器、运动学刚体碰撞器、刚体触发碰撞器、运动学刚体触发碰撞器碰撞时,实际上只有刚体碰撞器的情况下才发送了触发信息,原因我也不是很清楚,我想应该是因为刚体休眠吧,因为静态触发碰撞器并不能唤醒进入休眠的刚体,因此就会进行碰撞检测。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:259153次
积分:4051
积分:4051
排名:第2609名
原创:101篇
转载:327篇
评论:45条
(2)(3)(18)(14)(26)(5)(22)(27)(21)(32)(29)(23)(27)(40)(16)(4)(1)(10)(7)(2)(1)(4)(2)(2)(15)(19)(14)(15)(3)(1)(4)(1)(2)(6)(6)(2)(5)(1)(1)(1)您所在的位置: &
Unity3D开发:制作一个功能完整的炮台
Unity3D开发:制作一个功能完整的炮台
本文属于Unity3D引擎开发基础教程系列,通过前面所学的知识,我们来制作一个可以旋转、发射炮弹并且有爆炸效果的炮台。
制作炮台的旋转
大家知道,炮台需要向四周不同的角度发射炮弹,这就需要我们将炮台设置成为会旋转的物体,接下来我们就一起制作一个会旋转的炮台。
第一步:给炮台的炮筒添加旋转函数。
给炮台的炮筒部分添加一个旋转函数,使得炮台随着鼠标在X方向上的移动而移动。在Project【项目文件栏】中右键&&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="119" id="aimg_68487" src="/wyfs01/M01/08/20/wKioJlF4nFrRIiFQAAAGrn7fEZ0393.jpg" alt="1.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="60" id="aimg_68488" src="/wyfs01/M00/08/20/wKioOVF4nFqRvZHUAAAFVHck3SA603.jpg" alt="2.JPG" /> 新建一个JS函数,并按F2将其更名为&TurretRotate&,然后输入如下代码。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" id="aimg_68489" src="/wyfs01/M01/08/20/wKioOVF4nFqReu3gAAAoyCMQZMs544.jpg" alt="3.JPG" />
点选场景面板中的炮塔,找到炮塔上半部分所对应的对象,如图11.1所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" id="aimg_68490" src="/wyfs01/M01/08/20/wKioJlF4nFrxwLzKAABpgq3ws4Q653.jpg" alt="4.JPG" />
接着将刚才的 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="98" style="display:" id="aimg_68491" src="/wyfs01/M00/08/20/wKioJlF4nFqBghPuAAAFw70GlPI936.jpg" alt="5.JPG" /> 文件拖拽给这个对象。
第二步:设置摄像机跟随。
选中摄像机对象&Camera&,点选菜单栏中的 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="69" style="display:" id="aimg_68492" src="/wyfs01/M01/08/20/wKioOVF4nFqTb2A7AAAFLcP7ruE470.jpg" alt="6.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="103" style="display:" id="aimg_68493" src="/wyfs01/M00/08/20/wKioOVF4nFuyfkXiAAAGRLX-KSg732.jpg" alt="7.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="85" style="display:" id="aimg_68486" src="/wyfs01/M00/08/20/wKioJlF4nFuiXl_cAAAGRXWIjXQ347.jpg" alt="8.JPG" /> ,为摄像机添加一个平滑的跟随代码,但这里并没有设置跟随对象。
继续选中摄像机对象,在它的属性面板中找到&Smooth Follow(Script)&卷展栏下的&Target&,然后将炮台上半身对象拖拽给它。如图11.2所示: 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="345" style="display:" id="aimg_68485" src="/wyfs01/M01/08/20/wKioJlF4nFuiwWjfAAAdG8KVtLU399.jpg" alt="9.JPG" />
第三步:运行游戏,观察效果。
点击测试按钮 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="36" style="display:" id="aimg_68494" src="/wyfs01/M00/08/20/wKioOVF4nFvAaNsnAAADzWQ4wiY883.jpg" alt="10.JPG" /> ,试着移动下鼠标看看炮塔的旋转效果。如图11.3所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" style="display:" id="aimg_68495" src="/wyfs01/M01/08/20/wKioOVF4nFvR_ObWAAB1DPEzdjs036.jpg" alt="11.JPG" />
摄像机随着炮塔的旋转而旋转,而G.U.I图标和G.U.I文字一直在画面的左上角不动,效果很不错。
注:这里需要注意的问题一个是摄像机的动作容易发生冲突,所以在设置的时候,需要注意将不使用的摄像机动作关闭。还有一点是模型制作完成导出的时候,需要注意将模型的坐标轴设置好,否则在脚本执行的时候,会出现摄像机不能与炮口方向一致的情况。
制作炮弹的射击和爆炸效果
制作完了炮台的旋转,接下来我们继续制作炮弹相关的效果。
第一步:创建炮弹。
点击菜单栏的 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="72" style="display:" id="aimg_68496" src="/wyfs01/M01/08/20/wKioJlF4nFvQZkmmAAAFBT8gzSo663.jpg" alt="12.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="82" style="display:" id="aimg_68497" src="/wyfs01/M00/08/20/wKioJlF4nFviL_vIAAAEUji-UiE702.jpg" alt="13.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="52" style="display:" id="aimg_68498" src="/wyfs01/M01/08/20/wKioOVF4nFvQGnq1AAAE4Io7Thg682.jpg" alt="14.JPG" /> ,创建一个球体模型,并利用场景调整工具将其调整到和炮口差不多的大小。如图12.1所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" style="display:" id="aimg_68499" src="/wyfs01/M00/08/20/wKioOVF4nFvj34kEAAB8ZSD5T6c363.jpg" alt="15.JPG" />
第二步:给炮弹添加贴图。
找两张金属材质的贴图,第一张为基本RGB贴图,第二张为普通显示的贴图,如图12.2所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="253" style="display:" id="aimg_68500" src="/wyfs01/M00/08/20/wKioJlF4nFuDi5lzAAAnSPypZUg002.jpg" alt="16.JPG" />
这样做是为了一会在给物体赋予材质时,让它有立体的感觉。您也可以只给物体照一张贴图材质。找到想要的材质贴图之后,将它们拷贝到项目文件夹中的&Assets&【资源】文件夹内。
接下来选中刚才的球体模型,在它的属性面板中找到材质球下拉选项框。将他的渲染模式改为&Bumped Diffuse&,紧接着将深色的材质贴图拖放给第一个材质框,将浅色的材质贴图拖放给第二个材质框。如图12.3所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="344" style="display:" id="aimg_68501" src="/wyfs01/M01/08/20/wKioJlF4nFvxpCSbAABBHoY0jcY735.jpg" alt="17.JPG" />
于是我们就会得到一个带有材质效果的炮弹了。
第三步:设置炮弹的发射效果。
在菜单栏中点选 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="45" style="display:" id="aimg_68502" src="/wyfs01/M00/08/20/wKioOVF4nFzQaVqFAAAEE0snjeU432.jpg" alt="18.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="47" style="display:" id="aimg_68503" src="/wyfs01/M01/08/20/wKioOVF4nFyTEOgAAAADyjjc1Hc064.jpg" alt="19.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="45" style="display:" id="aimg_68504" src="/wyfs01/M01/08/20/wKioJlF4nFyQal-jAAAEzFBrb4E748.jpg" alt="20.JPG" /> ,创建一个预制类对象,并按下F2键将它的名字改为&Shot&,然后将球体模型拖入到预制对象中,并剔除场景面板中的炮弹模型。
但是这时的球体模型仅仅是在外观上有了炮弹的样子,我们还得让它具有炮弹一样的物体特性。接着在菜单栏中点选 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="69" style="display:" id="aimg_68505" src="/wyfs01/M00/08/20/wKioJlF4nFyiy_KzAAAFLcP7ruE008.jpg" alt="21.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="51" style="display:" id="aimg_68506" src="/wyfs01/M01/08/20/wKioOVF4nFzRH_OqAAAE9xyIcJU084.jpg" alt="22.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="57" style="display:" id="aimg_68507" src="/wyfs01/M00/08/20/wKioOVF4nFzTSrevAAAFQlVFeCQ495.jpg" alt="23.JPG" /> ,为炮弹添加一个刚体属性。
第四步:设置炮弹的发射起点。
在菜单栏中点选 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="72" style="display:" id="aimg_68508" src="/wyfs01/M00/08/20/wKioJlF4nFyyJ3nLAAAFBT8gzSo083.jpg" alt="24.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="80" style="display:" id="aimg_68509" src="/wyfs01/M01/08/20/wKioJlF4nFyx_E6wAAAGLJBDnKo194.jpg" alt="25.JPG" /> ,创建一个空对象放置在炮口,作为一会炮弹发射的起始点。按下F2将其更名为&FirePoint&。然后在Hierarchy【层次清单栏】中,把&FirePoint&拖拽到炮塔上半部分的旋转对象中去,这样可以使得它和炮塔一起旋转。
第五步:为炮弹创建发射函数。
在Project【项目文件栏】中右键&&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="47" style="display:" id="aimg_68510" src="/wyfs01/M00/08/20/wKioOVF4nFzzWkO2AAADyjjc1Hc343.jpg" alt="26.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="60" style="display:" id="aimg_68511" src="/wyfs01/M01/08/20/wKioOVF4nFzx_7TcAAAFVHck3SA522.jpg" alt="27.JPG" /> 新建一个JS函数,并按F2将其更名为&Open Fire&,然后输入如下代码。
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" style="display:" id="aimg_68512" src="/wyfs01/M01/08/20/wKioJlF4nFzRlU6cAAB6N__pc24426.jpg" alt="28.JPG" />
输入完毕之后,将该代码拖拽给Hierarchy【层次清单栏】中的发射对象&FirePoint&,然后我们会发现在属性面板中的&FirePoint
&接口和&Bullet&接口对象为空。所以我们必须得把发射点对象&FirePoint&和炮弹对象&Shot&拖拽到两个对应的接口上。如图12.4
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="344" style="display:" id="aimg_68513" src="/wyfs01/M00/08/20/wKioJlF4nFyyex6PAAAaIDMMOHc041.jpg" alt="29.JPG" />
第六步:添加火花效果。
接下来我们按下测试按钮 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="36" style="display:" id="aimg_68514" src="/wyfs01/M01/08/20/wKioOVF4nFyg6PGTAAADzWQ4wiY405.jpg" alt="30.JPG" /> 看看效果。大家会发现朝前发射的炮弹再碰到山体后,都被弹了起来。所以说此时我们制作的炮弹还只是一个球体,并不会爆炸。接下来我们还要继续作出炮弹的爆炸效果。
在Project【项目文件栏】的查找框中输入&Fireworks&关键字,将查找到的 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="90" style="display:" id="aimg_68515" src="/wyfs01/M00/08/20/wKioOVF4nFyweibyAAAFh-VshJg051.jpg" alt="31.JPG" /> 拖拽到场景面板,您会看到一个动态的实时爆炸火花。如图12.5所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" style="display:" id="aimg_68516" src="/wyfs01/M00/08/20/wKioJlF4nFzQBI3zAACAvq7acsU005.jpg" alt="32.JPG" />
接着确保该对象为选中状态,到它的属性面板中调节它的各个属性值,直到达到您想要的效果为止。如图12.6所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" style="display:" id="aimg_68517" src="/wyfs01/M01/08/20/wKioJlF4nF2j30sxAADwAuA67MY144.jpg" alt="33.JPG" />
接下来在菜单栏中点选 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="45" style="display:" id="aimg_68518" src="/wyfs01/M00/08/20/wKioOVF4nF3B3GrkAAAEE0snjeU264.jpg" alt="34.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="47" style="display:" id="aimg_68519" src="/wyfs01/M01/08/20/wKioOVF4nF3hBoh-AAADyjjc1Hc569.jpg" alt="35.JPG" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="45" style="display:" id="aimg_68520" src="/wyfs01/M01/08/20/wKioJlF4nF3j3QTPAAAEzFBrb4E983.jpg" alt="36.JPG" /> ,创建一个预制类对象,并按下F2键将它的名字改为&BoomPrefab&,然后将这个爆炸火花拖拽到预制对象中去,并删除场景面板中的火花。
第七步:为炮弹创建爆炸效果。
添加一段JavaScript代码,取名叫做&Boom&,这段代码的主要作用是给炮弹添加一个碰撞检测。如果炮弹碰撞到任何物体,就让炮弹在场景中消失,并在炮弹碰撞消失的地点加载爆炸火花的预制对象。具体代码如下:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" style="display:" id="aimg_68521" src="/wyfs01/M00/08/20/wKioJlF4nF3iudf_AABPz73H99g770.jpg" alt="37.JPG" />
输入完毕之后保存该代码,并把这段代码拖拽给炮弹预制对象&Shot&。然后点选预制对象&Shot&,在它的属性面板中找到刚才拖拽给它的&Boom
&卷展栏,再将爆炸火花预制对象&BoomPrefab&拖拽给它的接口&BoomFire&。运行游戏,看一下效果。如图12.7所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" style="display:" id="aimg_68522" src="/wyfs01/M01/08/20/wKioOVF4nF3xuojcAAB-A4ebyr0890.jpg" alt="38.JPG" />
第八步:设置爆炸效果的消失。
刚才一系列的设置之后,大家已经能够很明显的看到爆炸之后的火花效果,但它会一直在那里闪烁,并不会消失。这严重违背了现实生活的景象,所以我们还得为它加上一段时间限定消失代码。
继续创建JavaScript代码,更名为&desBoom&,具体代码见下:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" style="display:" id="aimg_68524" src="/wyfs01/M00/08/20/wKioOVF4nF2wjzFOAAAz2jw8i9I029.jpg" alt="39.JPG" />
输入完毕之后,将这段代码拖拽给爆炸火花预制对象&BoomPrefab&。再次运行程序,我们会发现火花在爆炸产生2秒后就自动消失了。
第九步:为爆炸效果添加音效。
完成了画面效果的制作,我们还需要给游戏添加上非常重要的一个元素&&声音。其实这个过程非常简单,只需要在网络上搜寻一个您认为合适的声音,并将这段声
音文件添加入项目文件夹的&Assets&【资源】文件夹内。然后在Project【项目文件栏】中,将其拖拽给爆炸火花的预制对象
&BoomPrefab&,这样声音文件就可以和爆炸火花同时产生了。
如果您觉得声音需要做适当的调节,例如&是否在预制对象产生时播放?&,&声音是否循环播放&等这些问题。我们都可以在选中预制对象后,在它的属性面板中找到声音的调节卷展栏,对它一一进行调节。
以上就是这款强大的跨平台3D游戏开发工具Unity3D的基础入门教程了。相信大家看过之后多加练习,一定能够制作出非常优秀的3D游戏,也希望本教程能够帮助大家较快的上手Unity3D,谢谢!
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
Unity,也称Unity3D,是近几年非常流行的一个3D游戏开发引擎,跨
既然强大的Android Studio来了,有什么理由不去用呢?
北京时间日,苹果在加利福尼亚召开新品发
免费下载+应用内购买(In-App Purchase)已成为移动应用
现在天气渐凉,秋意越来越浓厚了,上周,公司全体组织
本书主要介绍了SQL Server 关系数据库系统的应用知识,全面介绍了关系数据模型基础理论,SQL Server数据库系统安装、配
Windows Phone专家
Android开发专家
51CTO旗下网站

我要回帖

更多关于 强相互作用 的文章

 

随机推荐