|
|
|
|
Reply From: |
Bernard Cloutier |
(Eso es el mejor que puedo redactar en español )
Un RigidBody no se puede mover comó á un KinematicBody. Un KinematicBody se mueve en el code, peró á un RigidBody lo aplicas fuerzas: add_force pará una aceleratión o apply_impulse para una impulción (ex: una esploción). Empleá la función _integrate_forces para calcular las fuerzas que quieres aplicar.
El empleo de un RigidBody necesita más conocimientos de física que un KinematicBody. Porque necesita usted á un RigidBody? Que es lo que no puede realizar con un KinematicBody?
(Tiendra mas respuestas con una pregunta en inglés. El documentó de RigidBody no es traducido desgraciadamente: RigidBody — Godot Engine (3.2) documentation in English)
Gracias por la respuesta.
Necesito un RigidBody para que mi jugador sea afectado por explosiones, para poder hacer un gancho y para crear fricción.
Estuve intentando mover un RigidBody con addforce y applyimpulse, pero mi personaje no avanza solo cae hacia el piso.
Nitsuga | 2020-02-05 17:40
Necesito un RigidBody para que mi jugador sea afectado por explosiones, para poder hacer un gancho y para crear fricción.
Se lo puede hacer en un KinematicBody, solo necesita poner una función como register_hit sobre el jugador. Ex:
extends KinematicBody
var velocity := Vector3()
func register_hit(damage: int, source: Spatial, force: float) -> void:
apply_damage(damage)
var push_direction : Vector3 = (self.get_translation() - source.get_translation()).normalized()
velocity += push_direction * force
Algo así. En el script de la esploción:
extends ???
var damage = 50
var force = 120
...
func apply_explosion() -> void:
# En mi ejemplo $Area es una Node del tipo de Area con una formá esférica
for body in $Area.get_overlapping_bodies():
if body.has_method("register_hit"):
body.register_hit(damage, self, force)
Para el gancho con un KinematicBody: https://www.youtube.com/watch?v=mturL8WaHjY (si entiende al inglés)
Para la fricciòn, puede poner en el jugador un RayCast haciá el suelo. Tendria que tomar la fricción del Material del objeto y ponerla manualmente a su velocidad.
Manejar á un jugador es más facil con un KinematicBody, aún que se necesita codigar unos casos como estos a mano.
Bernard Cloutier | 2020-02-05 18:12