Unity_lab3/Unity3_lab/Assets/Scripts/FallingPlatform.cs

71 lines
2.5 KiB
C#
Raw 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;
using System.Collections;
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(Renderer))]
public class FallingPlatform : MonoBehaviour
{
[Header("Настройки Падения")]
[SerializeField] private float fallDelay = 0.5f; // Задержка перед началом падения
[SerializeField] private float fadeDuration = 2f; // Время, за которое платформа исчезнет
private Rigidbody rb;
private Renderer rend;
private Material platformMaterial;
private bool isTriggered = false;
void Start()
{
rb = GetComponent<Rigidbody>();
rend = GetComponent<Renderer>();
platformMaterial = rend.material;
rb.isKinematic = true;
rb.useGravity = false;
}
// Этот метод вызывается, когда что-то касается платформы
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.GetComponent<BallController>() != null && !isTriggered)
{
isTriggered = true;
// Запускаем процесс падения и выцветания
StartCoroutine(TriggerFallAndFade());
}
}
private IEnumerator TriggerFallAndFade()
{
// 1. Ждем небольшую задержку
yield return new WaitForSeconds(fallDelay);
// 2. Включаем физику, чтобы платформа начала падать
rb.isKinematic = false;
rb.useGravity = true;
// 3. Начинаем процесс выцветания
float elapsedTime = 0f;
Color startColor = platformMaterial.color;
while (elapsedTime < fadeDuration)
{
elapsedTime += Time.deltaTime;
// Высчитываем новую прозрачность (alpha) от 1 (непрозрачный) до 0 (прозрачный)
float newAlpha = Mathf.Lerp(startColor.a, 0f, elapsedTime / fadeDuration);
// Применяем новый цвет с измененной прозрачностью
platformMaterial.color = new Color(startColor.r, startColor.g, startColor.b, newAlpha);
// Ждем следующего кадра
yield return null;
}
// 4. Уничтожаем объект после того, как он стал полностью прозрачным
Destroy(gameObject);
}
}