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(); rend = GetComponent(); platformMaterial = rend.material; rb.isKinematic = true; rb.useGravity = false; } // Этот метод вызывается, когда что-то касается платформы private void OnCollisionEnter(Collision collision) { if (collision.gameObject.GetComponent() != 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); } }