123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using UnityEngine;
- namespace HQFPSWeapons
- {
- public class DebrisFader : MonoBehaviour
- {
- [SerializeField]
- private bool m_StartAutomatically = true;
- [SerializeField]
- [Clamp(0.01f, 30f)]
- private float m_FadeDuration = 10f;
- [SerializeField]
- private Material m_FadeMaterial = null;
- [SerializeField]
- private AnimationCurve m_FadeCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
- private float m_DestroyTime;
- private MeshRenderer[] m_Renderers;
- private Material m_SharedMaterial;
- private bool m_StartedFading;
- public void StartFading()
- {
- m_DestroyTime = Time.time + m_FadeDuration;
- m_StartedFading = true;
- }
- private void Awake()
- {
- m_Renderers = GetComponentsInChildren<MeshRenderer>(true);
- if(m_Renderers.Length > 0)
- {
- m_SharedMaterial = new Material(m_FadeMaterial);
- m_SharedMaterial.name = m_FadeMaterial.name + " - Clone";
- for(int i = 0;i < m_Renderers.Length;i ++)
- m_Renderers[i].sharedMaterial = m_SharedMaterial;
- }
- #if UNITY_EDITOR
- UnityEditor.MaterialEditor.ApplyMaterialPropertyDrawers(m_SharedMaterial);
- #endif
- }
- private void Start()
- {
- if(m_StartAutomatically)
- StartFading();
- }
- private void Update()
- {
- if(!m_StartedFading)
- return;
- if(m_Renderers.Length == 0 || Time.time >= m_DestroyTime)
- {
- Destroy(gameObject);
- return;
- }
- float alpha = 1f - (m_DestroyTime - Time.time) / m_FadeDuration;
- m_SharedMaterial.color = new Color(m_SharedMaterial.color.r, m_SharedMaterial.color.g, m_SharedMaterial.color.b, m_FadeCurve.Evaluate(alpha));
- }
- }
- }
|