Files
ScienceLab.WeightAndMass/Assets/Scripts/DisappearOnGround.cs
2026-04-07 03:14:32 +03:00

58 lines
1.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DisappearOnGround : MonoBehaviour
{
[SerializeField] private float _disappearDelay = 0.5f;
[SerializeField] private float _disappearDuration = 1.5f;
private bool _isFading = false;
void OnCollisionEnter(Collision collision)
{
if (_isFading) return;
if (collision.gameObject.CompareTag("Ground"))
StartCoroutine(FadeAndDestroy());
}
IEnumerator FadeAndDestroy()
{
_isFading = true;
yield return new WaitForSeconds(_disappearDelay);
Renderer[] renderers = GetComponentsInChildren<Renderer>();
foreach (var r in renderers)
{
foreach (var mat in r.materials)
{
mat.SetFloat("_Mode", 2);
mat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
mat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
mat.SetInt("_ZWrite", 0);
mat.DisableKeyword("_ALPHATEST_ON");
mat.EnableKeyword("_ALPHABLEND_ON");
mat.DisableKeyword("_ALPHAPREMULTIPLY_ON");
mat.renderQueue = 3000;
}
}
float t = 0f;
while (t < 1f)
{
t += Time.deltaTime / _disappearDuration;
foreach (var r in renderers)
foreach (var mat in r.materials)
{
Color c = mat.color;
c.a = Mathf.Lerp(1f, 0f, t);
mat.color = c;
}
yield return null;
}
Destroy(gameObject);
}
}