Flandre923
3002 words
15 minutes
Untity学习记录-2D平台跳跃游戏-04-为游戏场景添加物理组件

为游戏场景添加物理组件!#

为 Platforms 添加复合碰撞器#

首先,我们先来看 Platforms,就是我们的地面。这个地面是一个 Tilemap,所以我要先为它添加一个碰撞器,这样的话,我们的游戏角色才可以站在我们的地面上。所以我选择 Platforms,然后点击 Add Component,我们要来添加一个组件,添加完 Tilemap 的 Collider。

小伙伴们可以看到我的所有场景中属于 Platform 的 tile,都被添加了一个独立的方块的碰撞器,这个好像之前我们做上一个系列的视频当中就是这样做的。但是我们在移动的过程中发现了一些问题,当游戏角色在移动的时候,它要逐一碰撞每一个方块的碰撞器,后来导致了一些问题,有的时候这个游戏角色会卡在某一个碰撞器的中间不能移动。

所以这个视频当中我们要来讲讲一个小的技巧,我们要将我们的每一块单独的碰撞器合并成一个整体的复合的碰撞器,这样的话就可以很好的解决这个问题,怎么来做呢?

首先,我们来看看在 Tilemap Collider 2D 的下面有一个选项,叫做 Used By Composite,就是使用复合的 Collider,所以我们将它勾选的时候,它会跟你说你的 Collider 需要添加一个复合的 Collider 2D,所以我们直接点击 Add Component,然后我们搜索这个复合的 Collider 2D,然后将它添加进来,这个时候请留意我的整个 Tilemap 的小方块就变成了一个整体的碰撞器了。

然后假如我们这个时候在我们的 Platform 里面继续绘制我们的场景的时候,请留意它仍然会添加在这个整体的碰撞器当中,比如说我再次选择它来进行绘画,小伙伴们请留意有看到吗,它会直接在这个碰撞器的原有本身继续来增加这个碰撞器的范围,我将这个 Render 去掉,让大家能看到这个格,所以我继续来绘画的时候,它仍然是一个整体的碰撞器,所以这样的方法就可以很好的避免我的游戏角色,在移动的过程中有卡顿的现象。

但是也请留意当我们添加这个复合的 Collider 2D 的时候,它会为我的组件自动添加 Rigidbody 2D,也就是 2D 的物理的向量,所以它这里面会有一个重力,如果重力有 1 的话,那当我运行游戏的时候,我的所有场景都将会掉落下去,所以这不是我们想希望的,我们希望我的场景是不动的,所以在 Rigidbody 2D 这个位置 Body Type 选择 Static 就是固定静止的,这样的话,我们的场景就会固定不动了。

另外,小伙伴们也可以留意,我们也可以将这个 Platforms 选择在它的右上角 Inspector 的窗口里勾选 Static,这样的话,保持不变。

为 Player 添加 Rigidbody 和 Collider#

好的那设置好我们的 Platform 之后,我们要来为我们的 Player 添加一些物理的组件,然后我们来选择我们的 Robbie,我们要为它添加,让它可以有重力落在地面上。小伙伴们请留意,在 Rigidbody 中,我要做一些修改。

首先我们要留意的就是这个选项叫做 Collision Detection,这个就是它判断物理碰撞的方法,我们点击下拉菜单,选择 Continuous 就是连续不断的判断,这样的选项可以帮助我们的游戏角色,无论是在移动跳跃,判断它是否有踩到地面或者碰撞到我想碰撞的东西的时候变得更加顺滑,所以我们要选择连续不断的在判断和检测它是否碰上东西了,所以当前在我们的这个游戏需要的情况下,我们选择这个肯定就是会很好的,有助于我们的游戏角色的移动。

另外,我们要注意一个选项就是这个选项叫做差值,什么是这个差值呢?它只简单来说,就是我们的游戏角色在跳起,因为它有重力,这个时候它落在地面上的时候,它会稍稍陷入到我们的游戏场景一点,然后再弹回来,或者当它冲击在墙面上的时候也会稍稍有一些凹陷,其实这些是不容易,我们发现的,但是会非常影响我们游戏的操作的手感,所以我也看了一些我们的手册里的介绍,我们应该把它选择这个差值的选项,Rigidbody 在我们的游戏角色,我们就做这些简单的设置,其他的重力包括它的牵引力,摩擦力我们都不变。

小伙伴们如果感兴趣,Rigidbody 的详细的设置,我们可以点击右上角的这个问号的书本来启动我们的手册,我们会在 Api 的手册里看到 Rigidbody 的所有设置。

好的添加完了这个 Rigidbody 刚体之后,我们要来为它添加一个 Collider,所以我们点击 Add Component,我们为它添加一个方形的 Collider,我们选择 Box Collider 2D。添加了这个碰撞器,之后我们的游戏角色现在有一个绿色的框,我们不希望这个游戏的角色是这么大的一个碰撞器,所以我们要来调整一下,点击编辑,然后可以拖拽调整我们的碰撞器的大小,所以我们按需要可以将它设定为固定的数值,小伙伴们可以根据你们的需要来进行调整,那我也调整好了小伙伴们,它的位置和它的大小,我们只需要一个 Box Collider 就够了。

可能小伙伴们会问那我们在之前做那个小狐狸的游戏的时候,我们做了两个 Collider,因为在下蹲的时候,我要取消上部分的 Collider,为什么在这里不用呢?那自然有它不用的道理,所以 so far 我们只需要添加这一个 Box Collider 就可以了,因为我们会学习一个新的方法,再下蹲的时候,我们会将这个 Collider 缩小一半,这样的话就达到我们想要的效果了,这就是为什么我的 Y 值是在 2 以下的这个位置,所以一半的话我们刚好可以通过这个小的这个部分。

物理材质和 Layer 设置#

那接下来我们还要做的是什么呢?我们先来点击 Play 一下,看看我们的游戏角色是否能落在我们的场景上,好的我们的游戏角色可以落在我们的场景上了,但是也请留意我们还要考虑一个问题,假如我们的游戏角色在我们的场景的边缘位置,请留意它会有什么变化,哎,它会直接掉落倒在地上,这是为什么呢?因为我们没有锁定它的 Z 轴,所以我们要到 Rigidbody 地里面找到 Constraints,然后在这里,我们要将它的 Z 轴锁定,现在的话,我们的游戏角色就不会因为站在角落而掉落,而且掉落的时候它也不会旋转 OK,这是我们要做的,我们的游戏角色的一些设置。

那还有一个我们要留意的就是我们在制作另外一个游戏的时候,我的游戏角色在跑动撞到我的 Platform 上这个墙壁的时候,它有的时候会因为我的持续的 X 方向的 Velocity 的加速会一直黏贴在这个墙上,有的时候会卡在墙上,甚至在墙上的时候可以判断它落在地上了,而且可以使用跳跃,这不是我们想要的,所以我希望这个游戏人物在撞到墙上的时候能够滑下来。

之前我们有讲过如何制作一个 Material 一个物理的 Material,然后可以放到这里,就是 Physics Material,在这里,我们的游戏角色已经设置好了,我们可以点击这个查找的按钮,然后找到这个物理的材质,我们将它添加进来,其实我们双击点开这物理材质就知道了,这就是跟我们之前在小狐狸里设置的是一样的啊,它的这个摩擦力就设置的是 0,都是 0 就可以了。

我们还需要做的一件事情就是要为我们的游戏里的每一个项目来添加一个 Layer 来区分它,所以我们点击屏幕的右上角 Layer 的下拉菜单,我们点击 Add Layer 添加新的图层,我们要有一个是地面(Ground),还有一个是 Player,OK,然后不要忘记了,将我们的游戏角色把它的 Layer 调成 Player,然后再 Platform,我们要把它的 Layer 换成 Ground,因为它是地面,这样的话,我就可以用游戏角色添加代码之后来判断它是否站在地面上了。

好的那么截止到现在,我们都还没有写过任何一个代码,所以从下一个视频开始,我们要来一起写代码了!所以抓紧时间,小伙伴们快点把你的场景关卡设置好吧,我们下一个视频再见咯拜拜!

总结#

1. Platforms 的复合碰撞器设置:

  • Tilemap Collider 2D 的使用:

    • 学习如何为 Tilemap 添加 Tilemap Collider 2D 组件,使 Tilemap 具有碰撞属性。
    • 理解 Tilemap Collider 2D 会为每个 Tile 创建独立的碰撞器。
  • 复合碰撞器(Composite Collider 2D)的应用:

    • 了解复合碰撞器的作用,即合并多个独立的碰撞器,提高物理引擎的性能。
    • 掌握如何使用 Used By Composite 选项和 Composite Collider 2D 组件,将 Tilemap 的碰撞器合并为一个整体。
    • 理解复合碰撞器可以避免游戏角色在移动过程中卡顿的问题。
  • Rigidbody 2D 的设置:

    • 理解复合碰撞器会自动添加 Rigidbody 2D 组件。
    • 掌握如何将 Rigidbody 2D 的 Body Type 设置为 Static,使场景保持静止。
    • 通过勾选inspector面板的static选项,也可以达到固定场景的效果。

2. Player 的 Rigidbody 和 Collider 设置:

  • Rigidbody 2D 的高级设置:

    • 掌握 Collision Detection 选项的作用,选择 Continuous 模式提高碰撞检测的精度。
    • 理解差值(Interpolate)选项的作用,避免游戏角色在碰撞时出现凹陷现象。
    • 了解如何通过 Unity 手册查看 Rigidbody 2D 的详细设置。
  • Box Collider 2D 的调整:

    • 学会如何为游戏角色添加 Box Collider 2D 组件。
    • 掌握如何编辑 Box Collider 2D 的大小和位置,使其与游戏角色模型匹配。
    • 了解为什么在这个教程中,只需要一个BoxCollider2D组件。
  • Rigidbody 2D 的 Constraints 设置:

    • 掌握如何使用 Constraints 选项锁定 Rigidbody 2D 的 Z 轴,避免游戏角色在边缘位置掉落或旋转。
  • Physics Material 2D 的使用:

    • 了解 Physics Material 2D 的作用,即设置物理材质的摩擦力等属性。
    • 掌握如何为游戏角色添加 Physics Material 2D,使其在碰撞墙壁时能够滑下。

3. Layer 设置:

  • Layer 的作用:

    • 理解 Layer 的作用,即区分游戏场景中的不同对象。
    • 掌握如何添加和管理 Layer。
  • Layer 的分配:

    • 学会为游戏角色和地面分配相应的 Layer,如 Player 和 Ground。
    • 理解Layer在代码中判断物体是否在地面上的作用。
Untity学习记录-2D平台跳跃游戏-04-为游戏场景添加物理组件
https://fuwari.vercel.app/posts/unity/robbie/04rigidbody/
Author
Flandre923
Published at
2025-03-16