ArkanoidTG/Assets/Scripts/SplitBall.cs

79 lines
2.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}