最近项目有需要动态改变粒子颜色的需求,就记一下吧。
主要区别一下:
直接看代码,挂到粒子身上就可以了:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
*
* Writer:June
*
* Date: 2019.10.30
*
* Function:代码动态修改粒子颜色
*
* Remarks:颜色随机
* 第一种方式是过时的,但是也还能用
* 如果用新的方式,不能像第一种方式那样直接赋值。
*
*/
/// <summary>
/// 设置方式枚举
/// </summary>
public enum SetType
{
Old,
New
}
public class ChangeParticleSystemData : MonoBehaviour
{
/// <summary>
/// 自身粒子组件
/// </summary>
ParticleSystem _particleSystem;
/// <summary>
/// 计时器
/// </summary>
private float _timer;
/// <summary>
/// 变化时间
/// </summary>
public float _changeTime = 1f;
/// <summary>
/// 枚举
/// </summary>
public SetType _setType;
private void Start()
{
_timer = 0;
_particleSystem = GetComponent<ParticleSystem>();
}
private void Update()
{
_timer += Time.deltaTime;
switch (_setType)
{
case SetType.Old:
if (_timer >= _changeTime)
{
_timer = 0;
_particleSystem.startColor = new Color(Random.Range(0, 256) / 255f, Random.Range(0, 256) / 255f, Random.Range(0, 256) / 255f, Random.Range(0.1f, 1f));
}
break;
case SetType.New:
if (_timer >= _changeTime)
{
_timer = 0;
ParticleSystem.MainModule mainModule = _particleSystem.main;
mainModule.startColor = new Color(Random.Range(0, 256) / 255f, Random.Range(0, 256) / 255f, Random.Range(0, 256) / 255f, Random.Range(0.1f, 1f));
}
break;
default:
break;
}
}
}