add some extra assets FX and SFX
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
namespace PixPlays.ElementalVFX
|
||||
{
|
||||
public class ProjectileVfx : BaseVfx
|
||||
{
|
||||
[SerializeField] ParticleSystem _CastEffect;
|
||||
[SerializeField] ParticleSystem _HitEffect;
|
||||
[SerializeField] ParticleSystem _ProjectileEffect;
|
||||
[SerializeField] float _FlySpeed=1;
|
||||
[SerializeField] AnimationCurve _FlyCurve;
|
||||
[SerializeField] Vector2 _FlyCurveDirection;
|
||||
[SerializeField] bool _RandomizeFlyCurveDirection;
|
||||
[SerializeField] float _FlyCurveStrength;
|
||||
[SerializeField] float _ProjectileFlyDelay;
|
||||
[SerializeField] float _ProjectileDeactivateDelay;
|
||||
public override void Play(VfxData data)
|
||||
{
|
||||
base.Play(data);
|
||||
StartCoroutine(Coroutine_Projectile());
|
||||
}
|
||||
|
||||
IEnumerator Coroutine_Projectile()
|
||||
{
|
||||
_CastEffect.gameObject.SetActive(true);
|
||||
_CastEffect.transform.position = _data.Source;
|
||||
_CastEffect.transform.forward = (_data.Target - _data.Source);
|
||||
_CastEffect.Play();
|
||||
|
||||
yield return new WaitForSeconds(_ProjectileFlyDelay);
|
||||
_ProjectileEffect.gameObject.SetActive(true);
|
||||
_ProjectileEffect.transform.position = _CastEffect.transform.position;
|
||||
_ProjectileEffect.Play();
|
||||
|
||||
_FlyCurveDirection = _FlyCurveDirection.normalized;
|
||||
if (_RandomizeFlyCurveDirection)
|
||||
{
|
||||
_FlyCurveDirection = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f, 1f)).normalized;
|
||||
}
|
||||
|
||||
float lerp = 0;
|
||||
Vector3 startPos = _ProjectileEffect.transform.position;
|
||||
while (lerp < 1)
|
||||
{
|
||||
Vector3 pos = Vector3.Lerp(startPos, _data.Target, lerp);
|
||||
pos += (Vector3)_FlyCurveDirection * _FlyCurve.Evaluate(lerp) * _FlyCurveStrength;
|
||||
if (lerp > 0)
|
||||
{
|
||||
_ProjectileEffect.transform.forward = (pos - _ProjectileEffect.transform.position);
|
||||
}
|
||||
_ProjectileEffect.transform.position = pos;
|
||||
lerp += Time.deltaTime/_FlySpeed;
|
||||
yield return null;
|
||||
}
|
||||
_HitEffect.transform.forward = (_ProjectileEffect.transform.position - _data.Target);
|
||||
|
||||
_ProjectileEffect.transform.position = _data.Target;
|
||||
_ProjectileEffect.Stop();
|
||||
|
||||
|
||||
_HitEffect.transform.position = _data.Target;
|
||||
_HitEffect.gameObject.SetActive(true);
|
||||
_HitEffect.Play();
|
||||
|
||||
yield return new WaitForSeconds(_ProjectileDeactivateDelay);
|
||||
_ProjectileEffect.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public override void Stop()
|
||||
{
|
||||
base.Stop();
|
||||
if (gameObject != null)
|
||||
{
|
||||
_HitEffect.Stop();
|
||||
_ProjectileEffect.Stop();
|
||||
_CastEffect.Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user