Advertisement

Unity 3D 官方教程—— 2D Physics系列 学习记录

阅读量:

1.2D Physics Overview

在同一个场景中可以同时包含2D Physics游戏对象和3D Physics游戏对象;然而这些不同维度的游戏对象之间无法进行相互作用(interact with each other)。

2.2D Physics只在x和y轴上有反应,z轴怎样改变都是0.

3. 要设置Physic2D的各项参数见下:

需要注意的是,在Rigidbody2D中属于 gravity scale,默认值已经被设定为图中所示的位置和数值。随后,在Rigidbody2D属性窗口中找到并设置 gravity 的具体比例值。例如:输入数值为1时等同于100%,而输入数值为0.1则相当于10%的比例设置。

4D Physics包含6类Collider, 包括Circle、Box、Edge、Polygon、Capsule和Composite。

前四种的作用如下:

2.Rigidbody 2D

仅当 sprite 装载了 rigiditybody2d 类时才开始移动;仅当 colliders2d 被安装后才能实现场景互动。

2.Mass为质量。质量小的推质量大的就比较难推(两个都有collider)。

3.Linear Drug就像空气阻力,移动时会慢慢停止。

4.Angular是角阻力,原地旋转会慢慢停止。

5.Gravity Scale已在上面解释,是重力比率。

6固定角(简称Fixed Angle)是指该物体能够运动但无法转动。例如,在倾斜面上滚动时会直行而不偏转。

当选择Kinematic模式时,在此情况下物体不受外力影响(例如重力)。可以通过代码实现对position和rotation的控制。例如有一个平台,在代码中选择Kinematic后会自动被移动吗?但因为这个平台仍需与其它对象互动(如小球),因此需要配置2D碰撞器。

  1. 运动模糊内插运算(Interpolate移动平滑内插),通常用于对象呈现柔和运动或突然停止(jerky)。根据上一帧的情况决定运动模糊的程度;而外推(Extrapolate)则根据下一帧来调节平滑性(类似于游戏中的Player移动效果)。

9.Sleep Mode 睡眠状态,在启动时需考虑其他触发事件(collisions)。当处于清醒状态下(Awake),系统会保持活性并响应外部事件。应尽量避免选择Never Sleep模式,并提醒这可能对系统性能产生负面影响。

10.Collision Detection碰撞检测,一般都选Continuous。

当将碰撞检测设置为离散状态时,在物理更新阶段,具有刚体2D和碰撞2D的GameObject可能会发生重叠或穿透现象。所有的碰撞接触仅在新位置建立。

当启用持续碰撞检测时,在更新期间不会有刚体物体之间发生相互穿透的情况出现(即GameObjects不会彼此穿过)。相反地,在发生第一个接触事件后引擎会立即停止Collider 2D状态并在该接触点暂停GameObject的状态。相比而言,在这种情况下引擎会消耗更多的计算资源。(当然,在这种情况下建议选择离散碰撞检测以提高性能)

3.Collider 2D

EdgeCollider和PolygonCollider在功能上有些相似之处,并均基于多边形检测技术。然而,在细节方面存在显著差异:PolygonCollider类型具有闭合边界特性,在其应用领域中主要针对完全封闭的空间形状进行处理。相比之下,在EdgeCollider中,则主要用于表面开口的情况。

2.是否勾选Is Trigger的区别:来源http://www.cnblogs.com/infly123/p/3920393.html

当toggle被打开时它就成为了另一个功能模块能够识别特定路径(例如Zoombunny外围的spheir collider就是将toggle设置为启用以监测敌方入侵者;而内部的capsule collider则未设置为启用从而阻止其他物体通过)

第3章. 材料。用于调节二维物体在碰撞时的行为及反弹效果。二维材料与三维材料存在显著差异。二维材料的标准名称为Physics Material(带s)。这些材料模块均预先集成于系统中,请通过路径 Assets → Create → Physics Material 2D进行选择。制作不同形状如球体和平面所需的材料各不相同。将选定后即可拖拽至Material模块中使用。

当对Sprite施加Collider时, 系统会依据其边界自动生成相应的尺寸与形态。若觉得结果不符合预期, 则可通过拖拽位于 Collider 边缘的小绿色标记来手动微调其位置。这与游戏《生存射击》中 Collider设置的操作方式类似。

可通过按下键盘上的Ctrl键并点击绿色的小方块来实现取消修改边框。这样操作后,相关边框将变为红色。

  1. 一个对象可能仅具备collider而没有rigidbody(例如地形上的物体)。然而,在两者之间建立反应时,则至少其中一个必须拥有rigidbody。

4.Hinge Joint2D

感觉非常复杂啊!当前阶段暂时不需要深入学习这些知识了。不过以后或许会涉及相关的内容哦!比如说像弹簧这样的机械装置、门开启与关闭的状态以及悬挂的物体其运动状态等等。

5.Area Effector2D

组件Area Effector2D必须与具有Collider2D属性的对象相互作用时才能生效。例如,在游戏场景中,默认情况下某些物体可能会受到风力影响(如经典的露珠白裙被卷起),对应的地面网格区域就可以配置为使用Area Effector2D来施加物理效果于其他物体。

比如下面这个金币被吹起的游戏,金币的组件为

吹风机的组件为

请确保使用Area Effector,并在其(Collider组件中)设置为Used By Effector(如上图所示)。同时,在(Collider设置中)选择is trigger可以让其他物体进入此区域施加力(例如,在图中的金币)。此外,请确认受力物体同样需要配备(Collider组件)才能正常运作(例如,在图中的金币)。

组件设置:

Collider Mask:对哪个Mask产生作用。

Direction力的方向可以表示为其方向可以表示为向右或向上(范围从0359.99^\circ)。需要注意的是施力物体的方向系基于World Space坐标系。这相当于将被挂件对象进行任意角度旋转后确定其朝向的方式。 tutorial中曾提到过这一点。
然而目前Unity已有所改动,
允许在本地坐标系或世界坐标系中进行设置。

Force Magnitude:施加的力量的大小。

Force variation是指施加力量范围的变化操作。该操作会根据magnitude值设定的基础力基础上进行调整。具体而言,在magnitude参数设定下默认的力量值基础上乘以(1+variation)的比例因子得到最终力量值范围。例如,在magnitude值设为1.5且variation参数设为正数的情况下,默认力量值会在基础力量值的基础上上下浮动一定比例(如±5%)。特别地,在variation参数取负值时(例如-5),则会将力量值限定在基础力量值减去相应幅度的范围内。

Drag & Angular Drag:施加的阻力及角阻力的方向(例如上图中向上吹气的区域中,若设置Angular Drag为10,则金币离开该区域后将全部向右下落;若设置为其他值,则金币可能随机方向下落)

Force Target:当选择"rigidbody"时会影响整个物体,在应用力时不会发生旋转。而当选取"collider"选项时,在应用力时不仅会移动还会伴随有旋转(参考视频效果)。

6.Distance Joint2D

让组件所处的对象环绕另一对象(或一点)运行。例如,在组件内部设置位置的一个点与拥有Distance Joint2D组件的一个球相连,则该球如同摆钟般围绕此点摆动。即便没有连接和固定装置的情况下。

7.Point Effector2D

该点效应器作用于特定位置并施加力值至一定区域。例如,在某个位置引发爆炸后会将周围区域内的金币全部炸开;类似地,在黑洞模型中会将一定区域内的天体吸收到中心区域。与Area Effector(面积效果器)的设置非常相似,在其反应目标同样需要配置collider组件,并需勾选两个必要选项

不同于以往的方法的是,在Point Effector2D应用中,默认情况下所有相关对象都会附加脚本。通常会通过设置SetActive属性为true或false来控制其行为。例如,在按下空格键时设置为true,并执行一次操作。

到底是炸开还是吸入,则取决于For Magnitude值的正负性。(教程中的设置变化能带来多种效果非常有趣值得一看)/

8.Sliding & Bouncing in 2D

其主要应用于2D物理材质模拟领域,并涵盖两种典型效果:物体在接触地面时的弹跳作用(如软性物体触地反弹),以及在光滑表面滑动的效果(如冰面上的物体会持续减速)。

在 Project 下创建 2D Physics Material 后,在 Assets 文件夹中会生成一个新的材质,并根据需要进行参数设置。

设置好所需参数后, 将该Material拖入到目标物体的Collider中的Material框内即可完成设置。

完毕。

全部评论 (0)

还没有任何评论哟~