ArkanoidTG/Assets/Scripts/SplitBall.cs

79 lines
2.8 KiB
C#
Raw Permalink Normal View History

2024-11-25 23:14:57 +03:00
using UnityEngine;
public class SplitBall : Ball
{
public void Initialize(Vector2 velocity, float scale)
{
// Получаем компоненты
rb = GetComponent<Rigidbody2D>();
// Устанавливаем случайный цвет
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
if (spriteRenderer != null)
{
// Генерируем случайный цвет с прозрачностью
Color randomColor = Random.ColorHSV(0f, 1f, 0.7f, 1f, 0.7f, 1f);
randomColor.a = Random.Range(0.3f, 0.5f); // Устанавливаем случайную прозрачность
spriteRenderer.color = randomColor;
}
// Устанавливаем физические свойства
rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous;
rb.angularVelocity = 0f;
rb.gravityScale = 0f;
rb.interpolation = RigidbodyInterpolation2D.Interpolate;
rb.constraints = RigidbodyConstraints2D.FreezeRotation;
rb.sharedMaterial = new PhysicsMaterial2D
{
bounciness = 1f,
friction = 0f
};
// Устанавливаем масштаб
transform.localScale *= scale;
// Запрещаем создавать новые мячи
canSpawnBalls = false;
// Сразу запускаем мяч с заданной скоростью
isPlaying = true;
rb.velocity = velocity;
lastFrameVelocity = velocity;
}
protected override void Start()
{
// Не выполняем стандартную инициализацию Ball,
// так как дочерний мяч не должен следовать за платформой
}
protected override void Update()
{
// Поддерживаем постоянную скорость без изменения направления
if (rb != null && rb.velocity.magnitude != speed)
{
rb.velocity = rb.velocity.normalized * speed;
lastFrameVelocity = rb.velocity;
}
}
protected override void OnCollisionEnter2D(Collision2D collision)
{
// Вызываем базовую реализацию для обработки отскоков
base.OnCollisionEnter2D(collision);
}
private Vector2 AddRandomness(Vector2 direction, float intensity)
{
float randomAngle = Random.Range(-intensity, intensity) * 90f;
float rad = randomAngle * Mathf.Deg2Rad;
float cos = Mathf.Cos(rad);
float sin = Mathf.Sin(rad);
return new Vector2(
direction.x * cos - direction.y * sin,
direction.x * sin + direction.y * cos
).normalized;
}
}