Area2D本身也是派生自CollisionObject2D,也就是说我们只要有两个有Area2D的场景,就可以让它们进行互动了。 给柱子的场景添加Area2D之后,我们会看到一个警告标识。它说这个Area2D没有形状,也就没有任何碰撞会被检测到。Area2D本身并没有一个具体的形状,“形状”需要一个专门的定义来表示。这个节点就叫CollisionShape2D...
那么我们先完成炮台部分:新建一个area2d及collisionshape2d用于检测敌人是否进入,一个sprite用于放贴图,一个marker2d用于定位枪口位置,最后一个timer用于发射间隔时间。调整collisionshape2d大小及marker2d位置 接下来我们再完成炮弹部分,也是个area2d及collisionshape2d用于检测是否碰到敌人,一个sprite用于放贴图,一个GPUPartic...
打开Player场景,选中Sprite的子节点Area2D,打开Inspector旁边的Node面板 双击area_entered,打开信号连接窗口,选中Player,点击Connect 这样会切换到Player脚本上,并且在里面添加了一个新函数:_on_Area2D_area_entered(area)。该函数会在有碰撞体进入Sprite的Area2D(即检测攻击碰撞体)后被调用,因此,我们需要在这个函数里添...
在3D中我们同样有Area3D来做这个事情。为Enemy套上一个Area3D,给它一个shape然后调整到适当大小,连上body_entered即可检查玩家是否进入!具体操作不赘述。 注意,实际上这里需要调整碰撞层让它不检查enemy自己,因为CharacterBody3D本身也要参与碰撞的。这里请自行调整或者偷懒。 接下来要实现“看向玩家”。直接说结论,需...
1.首先是我不知道如何获得究竟是tilemap里面的哪个cell的tile和武器发生了碰撞(我查了一下tilemap的官方API文档好像没有关于碰撞部分的介绍),然后没办法我通过武器(根节点为area2d)获取碰撞信号(on_body_shape_entered),然后在武器上添加了一个position2D,每次接受碰撞信号后获得这个position2D的位置坐标,然后将它转化...
使用TextureRect是为了方便演示(找了个自带鼠标触发信号的节点)实际实现的话一般推荐Area2D连接mouse_shape_entered信号(因为Control子类容易受到界面布局影响,所以不推荐用于实际实现,图里使用ui节点只是为了方便演示) 晓美焰 数学算法 7 2d就是状态机呗,写个跟随方法就行了,要么每个角色塞一个相机,要么全局就一个...
在模拟器上模拟屏幕点击需要在项目设置中: 输入设备-指点 中勾选用鼠标模拟触摸 十三. 转化为字符串 简单的转化字符串方法: str(int) 十四. 碰撞检测 如果是Node2D节点则可以添加Area2d 将Area2d下方添加CollisionShape2D 并用信号body_entered连接被碰撞目标即可...
public void OnAreaEnter(Area2D area) { GD.Print("我发生碰撞了,和" + area.GetParent().Name); } } RayCast2D public partial class RayCast2DTest : RayCast2D { public override void _Process(double delta) { base._Process(delta); //强制更新一次 ...
玩家子场景是这个项目的最核心游戏元素,可以说是小游戏的灵魂所在。玩家子场景的制作非常简单:以碰撞体Area2D作为根节点,添加一个Sprite图片精灵、一个CollisionShape2D绘制碰撞区域、AnimationPlayer节点制作动画以及一个AudioStreamPlayer音频流播放节点。如果对这些节点的使用不熟悉,可以参考我之前的文章。
点击Player节点,添加CollisionShape2D节点为子节点,调整大小覆盖整个精灵,这个节点将作为碰撞检测节点。 保存。 2. 添加玩家脚本 2.1 创建脚本 选中Player场景,点击添加脚本。 语言:GDScript 继承:Area2D(默认) 模板:默认 路径:~/script/Player.gd 2.2 声明成员变量 ...