64 lines
2.5 KiB
C#
64 lines
2.5 KiB
C#
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<TextMeshPro>();
|
|
if (hitPointsText != null)
|
|
{
|
|
hitPointsText.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
protected override void OnCollisionEffect(Collision2D collision)
|
|
{
|
|
if (collision.gameObject.CompareTag("Ball"))
|
|
{
|
|
Ball originalBall = collision.gameObject.GetComponent<Ball>();
|
|
// Проверяем, может ли этот мяч создавать новые мячи
|
|
if (originalBall != null && originalBall.canSpawnBalls)
|
|
{
|
|
// Получаем текущую скорость мяча
|
|
Vector2 currentVelocity = originalBall.GetComponent<Rigidbody2D>().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);
|
|
}
|
|
}
|