Godot - Как настроить модульного персонажа с определением коллизии в дочерних узлах? - PullRequest
2 голосов
/ 16 июня 2020

Я пытаюсь построить «модульные» корабли в своей 2d игре, то есть у корабля есть корпус, двигатель, пушки и т. Д. c. каждая отдельная сцена. Корабль можно настроить так:

Ship   
|- Hull  
  |- Sprite   
  |- CollisionShape
|- Engine  
  |- Sprite   
  |- CollisionShape
  |- ParticleSystem

Теперь я застрял со следующей проблемой. Я установил узел "Корабль" как KinematicBody2D, поскольку использую этот узел для движения. НО столкновение должно происходить из подсцены (Корпус, Двигатель и т. Д. c.). Так что я тоже сделал их KinematicBodies и добавил CollisionShapes.

Однако это не работает, поскольку Кораблю нужен дочерний элемент CollisionShape (KinematicBody2D), и он находится во вложенных сценах (Hull, Engine и т. Д. c. ) не хватает. Вдобавок, если я перемещаю узел Ship с помощью move_and_collide / _slide, дочерние узлы не сталкиваются.

Я не думаю, что мой текущий подход верен. Что я могу сделать, чтобы достичь sh этого, не нарушая мою модульность, переместив дочерние объекты CollisionShapes на корабль?

1 Ответ

0 голосов
/ 05 августа 2020

Как PhysicsBody2D, KinematicBody2D нуждается в форме столкновения, если вы хотите, чтобы он столкнулся с другими физическими телами. Таким образом, вы можете добавить фигуру к узлу Ship, которая будет соответствовать всему кораблю или будет немного меньше его.

Конечно, есть несколько решений. Возможный способ предполагает, что вы можете сделать элементы корабля (двигатель, корпус, пушки и т. Д. c) узлами Area2D. Используя сигналы Area2D и метод _on_Area2D_area_entered(area), вы можете закодировать уникальный ответ событий, например столкновение с вражеской пулей, для каждого типа модуля корабля.

Ship (KinematicBody2D)   
|
|__CollisionShape2D
|
|__Hull (Area2D)
|  |_Sprite   
|  |_CollisionShape2D
|
|__Engine (Area2D)  
   |_Sprite   
   |_CollisionShape2D
   |_ParticleSystem

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...