本章节制作了敌人进入异常状态的三种特效
源代码
EntityFX.cs
新增代码
[Header("元素粒子")]
[SerializeField] private ParticleSystem igniteFX;
[SerializeField] private ParticleSystem chillFX;
[SerializeField] private ParticleSystem shockFX;
private void CancleColorChange()
{
CancelInvoke();
sr.color = Color.white;
//取消所有粒子效果
igniteFX.Stop();
chillFX.Stop();
shockFX.Stop();
}
public void IgniteFxFor(float _second)
{
//播放点燃粒子效果
igniteFX.Play();
InvokeRepeating("IgniteColorFx", 0, .3f);
Invoke("CancleColorChange", _second);
}
public void ChillFxFor(float _second)
{
//播放寒冷粒子效果
chillFX.Play();
InvokeRepeating("ChillColorFx", 0, .3f);
Invoke("CancleColorChange", _second);
}
public void ShockFxFor(float _second)
{
//播放电击粒子效果
shockFX.Play();
InvokeRepeating("ShockColorFx", 0, .3f);
Invoke("CancleColorChange", _second);
}
完整代码
using System.Collections;
using UnityEngine;
public class EntityFX : MonoBehaviour
{
private SpriteRenderer sr;
[Header("Flash FX")]
[SerializeField] private float flashDuration;
[SerializeField] private Material hitMat;
private Material originalMat;
[Header("Ailment color")]
[SerializeField] private Color[] chillColor;
[SerializeField] private Color[] igniteColor;
[SerializeField] private Color[] shockColor;
[Header("元素粒子")]
[SerializeField] private ParticleSystem igniteFX;
[SerializeField] private ParticleSystem chillFX;
[SerializeField] private ParticleSystem shockFX;
private void Start()
{
sr = GetComponentInChildren<SpriteRenderer>();
originalMat = sr.material;
}
public void MakeTransprent(bool _transprent)
{
if (_transprent)
sr.color = Color.clear;
else
sr.color = Color.white;
}
private IEnumerator FlashFX()
{
sr.material = hitMat;
Color currentColor = sr.color;
sr.color = Color.white;
yield return new WaitForSeconds(flashDuration);
sr.color = currentColor;
sr.material = originalMat;
}
private void RedColorBlink()
{
if (sr.color != Color.white)
{
sr.color = Color.white;
}
else
{
sr.color = Color.red;
}
}
private void CancleColorChange()
{
CancelInvoke();
sr.color = Color.white;
//取消所有粒子效果
igniteFX.Stop();
chillFX.Stop();
shockFX.Stop();
}
public void IgniteFxFor(float _second)
{
//播放点燃粒子效果
igniteFX.Play();
InvokeRepeating("IgniteColorFx", 0, .3f);
Invoke("CancleColorChange", _second);
}
public void ChillFxFor(float _second)
{
//播放寒冷粒子效果
chillFX.Play();
InvokeRepeating("ChillColorFx", 0, .3f);
Invoke("CancleColorChange", _second);
}
public void ShockFxFor(float _second)
{
//播放电击粒子效果
shockFX.Play();
InvokeRepeating("ShockColorFx", 0, .3f);
Invoke("CancleColorChange", _second);
}
private void IgniteColorFx()
{
if (sr.color != igniteColor[0])
sr.color = igniteColor[0];
else
sr.color = igniteColor[1];
}
private void ChillColorFx()
{
if (sr.color != chillColor[0])
sr.color = chillColor[0];
else
sr.color = chillColor[1];
}
private void ShockColorFx()
{
if (sr.color != shockColor[0])
sr.color = shockColor[0];
else
sr.color = shockColor[1];
}
}