using System.Collections; using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; using DG; using DG.Tweening; public class WeaponCreationEffect : MonoBehaviour { [SerializeField] private MeshRenderer m_mesh; private Material m_material; [ColorUsageAttribute(true, true)] public Color m_FresnelColor; public float m_dissolveTime = 1f; public float m_fresnelTime = 0.3f; public float m_lightIntensity = 3f; public Light m_light; [SerializeField] private ParticleSystem m_particles; [SerializeField] private ParticleSystem m_distortions; private void Awake() { if (m_mesh == null) m_mesh = GetComponent(); if (m_mesh == null) { Debug.LogError("No mesh renderer found!"); return; } m_material = m_mesh.material; if (m_light) m_light.intensity = 0f; ParticlesEmission(false); } private void ParticlesEmission(bool enabled) { if (m_particles != null) { var emm = m_particles.emission;//.enabled = false; emm.enabled = enabled; } if (m_distortions != null) { var emm = m_distortions.emission;//.enabled = false; emm.enabled = enabled; } } [Button] public void Uncreate() { DOTween.Kill(m_material); m_material.SetFloat("_Threshold", 0f); m_material.DOFloat(1f, "_Threshold", 1f); } private IEnumerator CreateCoroutine() { m_material.SetFloat("_Threshold", 1f); Sequence sq = DOTween.Sequence(); sq.Append(m_material.DOFloat(0f, "_Threshold", m_dissolveTime)); ParticlesEmission(true); yield return new WaitForSeconds(1f); ParticlesEmission(false); //yield return new WaitForSeconds(1f); DOTween.Kill(m_material); m_material.SetColor("_FresnelColor", Color.black); m_material.SetFloat("_EffectThreshold", 1f); sq.Append(m_material.DOColor(m_FresnelColor, "_FresnelColor", m_fresnelTime).SetEase(Ease.InSine)); sq.Append(m_material.DOColor(Color.black, "_FresnelColor", m_fresnelTime).SetEase(Ease.InSine)); m_material.DOFloat(0f, "_EffectThreshold", m_dissolveTime * 2f).SetEase(Ease.Linear).SetLoops(-1, LoopType.Yoyo);//.SetDelay(m_dissolveTime+2f* m_fresnelTime); if (m_light) { m_light.intensity = 0f; sq = DOTween.Sequence(); sq.Append(m_light.DOIntensity(m_lightIntensity, m_dissolveTime + m_fresnelTime).SetEase(Ease.InSine)); sq.Append(m_light.DOIntensity(0f, m_fresnelTime).SetEase(Ease.InSine)); } //m_particles.DO //m_material.DOs // m_material.DOFloat(0f, "_Threshold", 1f); //set fresnel color //m_material.DOColor(m_FresnelColor, "_FresnelColor", 2f); yield return null; } [Button] public void Create() { StartCoroutine(CreateCoroutine()); } }