UnityParticleSystem特效进步同步的问题
2023-12-15 23:28:54
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ParticleSystemTest : MonoBehaviour
{
public ParticleSystem[] particleSystems;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//处理同类特效 不同时间创建时 需要跟前面得特效进步同步的问题
if (Input.GetKeyDown(KeyCode.Alpha1))
{
particleSystems[0].gameObject.SetActive(true);
particleSystems[0].Simulate(0.1f);
//API解释https://blog.csdn.net/SmillCool/article/details/127070139
particleSystems[0].Play();
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
particleSystems[1].gameObject.SetActive(true);
//特效跟随到特效索引0的进度
particleSystems[1].Simulate(particleSystems[0].time);
//从此进度开始一起播放
particleSystems[1].Play();
}
/**
* 以下是lua代码
--增加需要关心得特效
function _M:AddItemEffect(effect)
if not self.mCareEffectList then
self.mCareEffectList = {effect}
self:UpdateReferenceEffect(effect)
else
table.insert(self.mCareEffectList,effect)
end
end
--更新参照得特效
function _M:UpdateReferenceEffect(effect)
self.mReferenceEffect = effect
end
--- 刷新特效进度
function _M:RefreshParticeSystemSimulate()
if not self.mScrollReward then return end
if not self.mReferenceEffect then return end
for i, effect in ipairs(self.mCareEffectList) do
effect:SyncSimulateProcess(self.mReferenceEffect)
end
end
*/
if (Input.GetKeyDown(KeyCode.Alpha3))
{
particleSystems[2].gameObject.SetActive(true);
particleSystems[2].Simulate(particleSystems[0].time);
particleSystems[2].Play();
}
if (Input.GetKeyDown(KeyCode.Alpha4))
{
particleSystems[3].gameObject.SetActive(true);
particleSystems[3].Simulate(particleSystems[0].time);
particleSystems[3].Play();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using Game.UI;
using Game.Framework;
using UnityEngine.UI;
using Youda.Game;
//namespace Youda.Game
//{
public class SimulateEffectMgr :MonoBehaviour
{
public EffectBase ReferenceEffectBase;
public List<EffectBase> EffectBasesList = new List<EffectBase>();
public void AddEffectBasesList(EffectBase effectBase)
{
EffectBasesList.Add(effectBase);
}
public void SetReferenceEffectBase(EffectBase effectBase)
{
ReferenceEffectBase = effectBase;
}
private void Update()
{
if (ReferenceEffectBase)
{
//ReferenceEffectBase.SimulateProcessUnscaledDeltaTime();
foreach (EffectBase item in EffectBasesList)
{
item.SyncAllSimulateProcess(ReferenceEffectBase);
}
}
}
private void OnDestroy()
{
EffectBasesList.Clear();
ReferenceEffectBase = null;
}
}
//}
public class EffectBase : EntityBase
{
//所有粒子系统
protected ParticleSystem[] ParticleList;
public void SyncAllSimulateProcess(EffectBase effectBase)
{
//必须需要是根节点特效 这样子节点才能 一起进度同步
for (int index = 0; index < 1; index++)
{
if (ParticleList[index].time != effectBase.GetParticleSystem(index).time)
{
ParticleList[index].Simulate(effectBase.GetParticleSystem(index).time);
ParticleList[index].Play();
}
}
}
/// <summary>
/// 获取索引特效
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public ParticleSystem GetParticleSystem(int index = 0)
{
return ParticleList[index];
}
}
文章来源:https://blog.csdn.net/weixin_41995872/article/details/135018072
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!