For the complete documentation index, see llms.txt. This page is also available as Markdown.

Снаряды

У CSL нет встроенного компонента снаряда. Используйте префаб со скриптом для движения и либо триггерным коллайдером, либо запросом по радиусу для попаданий.

Снаряд на основе триггера

Создайте префаб со следующим:

  • Спрайт или Spine_Animator

  • A Circle_Collider с Является триггером включено

  • Компонент ниже

Damageable :: class : Component {
    health: float = 100 @ao_serialize;

    take_damage :: method(amount: float) {
        health -= amount;
    }
}

Projectile :: class : Component {
    direction: v2;
    owner: Entity;
    speed: float = 12 @ao_serialize;
    damage: float = 25 @ao_serialize;
    lifetime: float = 3 @ao_serialize;
    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();
    }
}

Запустите префаб с Scene.instantiate, затем инициализируйте его компонент:

Запускайте движение снаряда и нанесение урона в обычном общем игровом потоке. Предсказание выполняет тот же код на клиентах и сервере, поэтому не оборачивайте его в Game.is_server().

Быстрые снаряды

Проверки пересечения триггеров могут пропустить маленькую цель, когда снаряд проходит через неё между кадрами симуляции. Для быстрых снарядов проверяйте несколько точек вдоль отрезка движения с помощью Scene.get_all_components_in_range, или используйте больший радиус столкновения. См. Навмеш и столкновения пример с подшагами.

Вызывайте SFX.play из того же предсказанного пути попадания. Система звука согласует предсказанный звук с результатом сервера.

Последнее обновление