Godot 2D碰撞体节点

这次内容是博主对Godot中2D常用的碰撞体节点和简单实例的见解。


具体的参考内容是来自开发游戏的老王【手把手带你Godot游戏开发】FlappyBird:5.1 无尽水管子滚滚来(一)中的分支——碰撞和碰撞检测的简单实例

重温经典FlappyBird

//后续内容会结合这个游戏实例进行分析节点的使用


前言:

看到这里,大家对碰撞的这个词是很熟悉的。它在我们现实生活中,也是起着必不可少的作用。那在Godot引擎中,如何理解碰撞的概念和技术操作呢。


RigidBody 2D

1.定义

该节点是名称是刚性节点,它的主要特性是可以自动碰撞检测,产生碰撞响应。一般用于受外界影响而产生运动的物体。

2.游戏设计场景

在FlappyBird游戏设计中,是需要设计一个小鸟为躲避障碍的闯关游戏。游戏是需要结束的,也就是我们说的结束临界点。这个临界点,就便是小鸟遇到水管碰撞的那个瞬间,才能够让游戏得以结束。

从RigidBody 2D节点的使用场景来看,它是需要收到外界影响而产生运动的。在分析之后,我们得知小鸟是受到了外界(水管)的影响而产生的失败。这便是RigidBody 2D节点的一个使用理念。

3.创建位置

在这里插入图片描述


StaticBody2D

1.定义

该节点属于静态碰撞节点。该节点的基本特性,是有自动碰撞检测,位置固定不变的特点。那么它通常使用场景是一般用于固定的墙壁,地面等。

2.游戏设计场景

在FlappyBird游戏设计中,是拥有小鸟与水管碰撞这一触发机制。在游戏制作中,水管是保持向左移动的,但其对应的位置是相对静止的。因StaticBody2D该节点是静态碰撞节点,从而可以满足设计理念。

3.创建位置

在这里插入图片描述


题外话——碰撞范围

若出现碰撞情况,是不是需要一个从物理层面上的概念,碰撞范围。

在现实中,两个骑自行车的小朋友不小心撞到了一起,他们便会有相对于自己的碰撞条件和范围。一旦两人的碰撞范围有着重合或者交集,就会有了满足一定的条件,碰撞。

那么CollisionShape2D这一概念,就是我们在游戏设计中,所规定某个物体实际的碰撞范围。


CollisionShape2D

1.定义

CollisionShape2D,它是表示在设计的2D空间中的碰撞形状数据的节点。

简单来说,就是可为一个RigidBody2D刚性节点创建碰撞形状。也是我们上文说到两人相撞的实际情况,所提到的遇到的碰撞范围。

2.游戏设计场景

在FlappyBird游戏设计中,我们就需要为对应碰撞的节点规定碰撞形状。

例:在游戏中,需要制作一个小鸟碰撞水管的情节。

那么话转回RigidBody 2D的设计场景中,二者虽都已是满足碰撞的节点,但并没有碰撞范围,就不能实现碰撞这一情况。所以要在它的子节点添加 CollisionShape2D,确定它的碰撞形状。

类下图:

在这里插入图片描述

3.创建位置

在这里插入图片描述

题外话——临摹制作FlappyBird出现的问题

在博主刚开始临摹开发游戏的老王【手把手带你Godot游戏开发 第一弹】零基础入门案例:FlappyBird(教程目录及源代码)中,在制作小鸟与水管碰撞这一环节时,总会发现,小鸟与水管的接触距离有着肉眼可见的距离!!!但居然下面的程序判定小鸟已经die了。

那就是CollisionShape2D中的Shape作祟。


Shape

新建需要的CollisionShape2D节点之后,就应该设计碰撞的形状。

这里部分的参考内容是来自开发游戏的老王【手把手带你Godot游戏开发】FlappyBird:2.坠落吧,小鸟

在创建完毕CollisionShape2D完这个节点,并不代表我们的碰撞范围就已经确定了。

会出现这个较为烦人的 “!号”

在这里插入图片描述

那么我们来逐个了解,并解决。


(1).Shape类型

Shape类型究竟有哪些呢。来上图。

在这里插入图片描述
好吧,博主承认,在刚开始学习Godot这块内容的时候,头都大,英语不好的我真的挠头。

但是对我们来说,可以依靠英文旁边的图形来判断碰撞范围的形状啦!

这里博主着重的说!

在实际制作中,可以根据物体的实际物理形状,选择对应的Shape(当然这里你要是选择一些奇奇怪怪的物体制作碰撞效果!那那那,选择一个近似的!)然后根据Shape下面的选项,对碰撞形状大小进行调整。


(2).解决“!号”
1.制作小鸟Shape

我们来拿在FlappyBird的游戏设计来说,因小鸟的身形是更接近圆形的,就可在Shape中选择CircleShape2D。

按一下CircleShape2D,便才可调它对应的参数。

调整碰撞大小自然而然就需要靠Radius半径啦。

中心位置在显示的对应的2D制作界面位置也有红色点显示,我们可以进行拖动中心红点位置调整碰撞范围位置。这样让小鸟与碰撞范围接近重合,便是默认小鸟实际碰撞的区域啦。

在这里插入图片描述

2.制作水管

在制作水管的时候,博主利用的是RectangleShape,因为水管是接近长方形的。那么同上讲述的我就不再赘述了,但是这里不同于CircleShape的点在于,它需要更改大小的是长与宽(对应的X和Y)。然后再进行其他操作,确定碰撞范围!!!

当然也可以选择直接在2D界面设计中直接调整大小,看大家的习惯与经验了。

在这里插入图片描述

博主出现的问题回答

当时博主出现的问题,因间距过大但仍被判定为碰撞。就是所设计的小鸟Radius调的碰撞范围过大了。(Radius:半径范围;半径)

在这里插入图片描述


结尾

这里并没有完全给大家介绍全所有的碰撞体节点的内容,但大家可以在设计应用中可以去尝试和了解。


欢迎各位批评指正!!!

那么,再次感谢开发游戏的老王的Godot教程【手把手带你Godot游戏开发 第一弹】零基础入门案例:FlappyBird(教程目录及源代码)

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柠檬茶12138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值