ArkanoidTG/Assets/Scripts/MultiBallBrick.cs

64 lines
2.5 KiB
C#
Raw Permalink Normal View History

2024-11-25 23:14:57 +03:00
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);
}
}