101 lines
3.0 KiB
C#
101 lines
3.0 KiB
C#
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<MeshRenderer>();
|
|
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());
|
|
}
|
|
} |