hareqj   ♂  喵他  
 编程让人生更优雅

Godot3D简单FPS射击游戏入门6--简单靶子

作者:多能豆
3D  单机游戏  第三人称RPG 


首先,我们得先到子弹的脚本下写出:


我们新增了两个变量:
!子弹伤害
!击中某物(判断用)
接下来,我们在_ready()中,获取Area并连接信号:
body_entered信号是检测是否有PhysicsBody或GridMap(即有碰撞行为的物体)进入Area的区域(简单来说就是检测碰撞),它可以返回与Area碰撞的物体
并将这个信号连接到当前脚本(self)的collided()函数

我们再来看一下collided()函数:


首先,它会传入参数body(即碰撞的物体,可以理解为get_node(“碰撞物体”)的缩写 )
接下来检测hit_something是否为false,因为用queue_free()方法删除节点时,节点(子弹)并不是立刻被删除,为了防止子弹多重碰撞,我们就得这样。
然后用has_method()方法检测这个碰撞物体是否拥有方法(函数)bullet_hit(),毕竟子弹不只打到靶子上,还有可能到地面上,为了防止报错,才这样做。
如果碰撞物体有bullet_hit(),我们就会执行bullet_hit(),并把“子弹伤害”传入
无论上述if中的语句是否执行,毕竟这颗子弹已经碰撞了,所以将hit_something()设置为true
然后将其移除

既然子弹可以碰撞了,回到主场景,在world节点下添加一个靶子(KinematicBody):


代码非常简单:


声明health(生命值),声明bullet_hit()函数,并传入“子弹伤害”
然后将生命值减去子弹伤害
并检测生命值是否小于等于0,如果是,将其移除

这样就可以了

!!!但注意一点:Area和被碰撞物体的碰撞区域不能是由“创建三角网络碰撞同级”创建的,因为concave无法检测碰撞!!!


注:同一个脚本可以被多个节点使用。例:如果想制作多个靶子,只需要将每个“靶子”节点连接到我们创建的"target.gd"就行了,不需要重复创建。

[举报]  赞↑ [0 踩↓ [0
暂无评论
[声明]

初衷和宗旨:共同努力,推动Godot游戏引擎在国内的普及和发展.
1.本站所有内容皆为用户发布,如有涉嫌侵权请联系hareqj#163.com,告知内容右上角所在编号以及侵权证据.
2.禁止发布色情/暴恐/时政/商广/带网址或二维码水印/涉嫌隐私或未经授权的私人图片.
3.举报和投稿:hareqj#163.com

Godot中文社区QQ群
Copyright Godot中文社区 Godott.com All Rights Reserved.
京ICP备13032831号