using UnityEngine; using TMPro; public class MultiBallBrick : Brick { public float splitBallScale = 0.7f; // Масштаб для новых мячей public float splitBallSpeedMultiplier = 1.2f; // Множитель скорости для новых мячей public int numberOfSplitBalls = 2; // Количество создаваемых мячей protected override void Start() { base.Start(); // Отключаем отображение текста, если оно есть TextMeshPro hitPointsText = GetComponentInChildren(); if (hitPointsText != null) { hitPointsText.gameObject.SetActive(false); } } protected override void OnCollisionEffect(Collision2D collision) { if (collision.gameObject.CompareTag("Ball")) { Ball originalBall = collision.gameObject.GetComponent(); // Проверяем, может ли этот мяч создавать новые мячи if (originalBall != null && originalBall.canSpawnBalls) { // Получаем текущую скорость мяча Vector2 currentVelocity = originalBall.GetComponent().velocity; float currentSpeed = currentVelocity.magnitude; // Создаем несколько дополнительных мячей for (int i = 0; i < numberOfSplitBalls; i++) { CreateSplitBall(originalBall.transform.position, currentSpeed); } } // Вызываем базовый TakeHit() для уничтожения блока base.TakeHit(); } } private void CreateSplitBall(Vector3 position, float speed) { // Генерируем случайный угол в радианах float randomAngle = Random.Range(0f, 2f * Mathf.PI); // Создаем вектор направления Vector2 direction = new Vector2( Mathf.Cos(randomAngle), Mathf.Sin(randomAngle) ).normalized; // Применяем скорость и множитель Vector2 newVelocity = direction * speed * splitBallSpeedMultiplier; // Создаем дочерний мяч через GameManager GameManager.Instance.CreateSplitBall(position, newVelocity, splitBallScale); } }