Proyectiles
CSL no tiene un componente de proyectil integrado. Usa un prefab con un script para el movimiento y un collider de disparador o una consulta de rango para los impactos.
Proyectil basado en disparador
Crea un prefab con:
Un sprite o
Spine_AnimatorUn
Circle_Collidercon los campos Es disparador habilitadoEl componente siguiente
Damageable :: class : Component {
@ao_serialize health: float = 100;
take_damage :: method(amount: float) {
health -= amount;
}
}
Projectile :: class : Component {
direction: v2;
owner: Entity;
@ao_serialize speed: float = 12;
@ao_serialize damage: float = 25;
@ao_serialize lifetime: float = 3;
spent: bool;
ao_start :: method() {
collider := entity.get_component(Circle_Collider);
collider.is_trigger = true;
collider.on_trigger_start = proc(self: Collider, other: Collider) {
projectile := self.entity.get_component(Projectile);
projectile.hit(other.entity);
};
entity.queue_for_destruction(lifetime);
}
ao_update :: method(dt: float) {
entity.add_local_position(direction * speed * dt);
}
hit :: method(other: Entity) {
if spent return;
if other == owner return;
target := other.get_component(Damageable);
if target == null return;
spent = true;
target.take_damage(damage);
entity.destroy();
}
}Genera el prefab con Scene.instantiate, luego inicializa su componente:
Ejecuta el movimiento y el daño del proyectil en la ruta normal compartida de juego. La predicción ejecuta el mismo código en los clientes y en el servidor, así que no lo protejas con Game.is_server().
Proyectiles rápidos
Las comprobaciones de superposición del disparador pueden pasar por alto un objetivo pequeño cuando un proyectil lo cruza entre cuadros de simulación. Para proyectiles rápidos, consulta varios puntos a lo largo del segmento de movimiento con Scene.get_all_components_in_range, o usa un radio de colisión mayor. Consulta Navmesh y colisión para un ejemplo de subpasos.
Llama a SFX.play desde la misma ruta de impacto predicha. El sistema de sonido reconcilia el sonido predicho con el resultado del servidor.
Última actualización