71 lines
2.5 KiB
C#
71 lines
2.5 KiB
C#
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);
|
||
}
|
||
}
|