我对 Stack Overflow 和游戏开发都很陌生,如果这个问题很愚蠢,请见谅。我目前正在 godot 中开发一款游戏,玩家可以向敌人发射射弹(过于简单)。但是,我遇到了以下问题:射弹在玩家模型内部生成,然后与发射它的玩家发生碰撞并弹开。我的射弹使用 RigidBody2D 类型,而玩家是 CharacterBody2D。
我尝试了以下方法:
将碰撞图层蒙版设置为与玩家不同的图层
问题:射弹应该从墙壁反弹,然后击中玩家。因此,两者必须发生碰撞。
执行第一个建议,但在第一次墙壁反弹后启用遮罩层
问题:稍后我想使用类似于导弹的东西。玩家可以发射导弹,导弹会跟随鼠标移动,然后击中敌人或玩家。因此,导弹应该能够与玩家发生碰撞,而不会反弹到墙上。
执行第一个建议,但在 x 毫秒后启用遮罩层
问题:射弹的速度不同,并且玩家可以拥有不同大小的模型,所以我想避免这样的事情。
以偏移量生成射弹,使其从玩家命中框之外开始
问题:我试过这个,但看起来不太对劲,尤其是在玩家模型不同的情况下。但如果没有其他解决方案,这可能是可行的方法。
基本上,我想禁用两者之间的碰撞,然后在射弹离开玩家碰撞区时触发 body_exited 信号,然后重新启用碰撞。问题是,如果我禁用碰撞,body_exited 信号将不会触发,因为没有碰撞。但是启用碰撞后,射弹会从玩家身上弹开。基本上,我想要的是两者之间最初没有物理交互,但有主动碰撞检测。任何帮助都将不胜感激。此外,因为我是新手,所以非常感谢最佳实践建议。如果我的做法被认为是不好的做法,请告诉我。
老实说,我会使用偏移,但对射击动画会产生不同的效果。
但是,如果你真的想这样做,我的建议是使用角色上方的一个区域来检测射弹。一旦射弹离开该区域,你就为射弹启用碰撞。
这样,如果角色的模型/尺寸/比例不同,您可以相应地调整区域。所以您不需要依赖容易出错的计时器。
关于禁用碰撞,除了禁用碰撞形状和更改图层之外,您还可以使用 从代码中添加异常
add_collision_exception_with
,然后使用 将其删除remove_collision_exception_with
。这样,您就可以禁用角色和射弹之间的碰撞,而无需禁用其他任何东西。