79 lines
2.8 KiB
C#
79 lines
2.8 KiB
C#
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;
|
||
}
|
||
}
|