miduo_client/Assets/ManagedResources/~Lua/Common/ParticalSystemEffectCtrl.lua

107 lines
3.1 KiB
Lua

ParticalSystemEffectCtrl = {}
self =ParticalSystemEffectCtrl
local TimerManager=nil;
--计算粒子特效播放时长(EffectObjRoot特效父级)--暂时不支持多个特效添加
function ParticalSystemEffectCtrl.SetParticalSystemLength(EffectObjRoot,Plylength)
if (Plylength) then
ParticalSystemEffectCtrl.Plylength=Plylength
return ParticalSystemEffectCtrl.Plylength
end
local particleSystemsArr= EffectObjRoot:GetComponentsInChildren(typeof(UnityEngine.ParticleSystem))
local particleSystemsLuaArr=particleSystemsArr:ToTable()
local float_maxDuration = 0;
for i,v in pairs(particleSystemsLuaArr) do
if(v.emission().enabled)then
if(v.loop)then
return -1;
end
local float_dunration = 0;
if(v.emission.rateOverTime <=0)then
float_dunration = v.main.startDelay + v.main.startLifetime;
else
float_dunration = v.main.startDelay + Mathf.Max(v.main.duration,v.mian.startLifetime);
end
if (float_dunration > float_maxDuration) then
float_maxDuration = float_dunration;
end
end
end
return float_maxDuration;
end
--设置粒子效果播放完成后销毁/隐藏(Bool_Destroy==true,销毁)
function ParticalSystemEffectCtrl.SetParticalSystemDestroyOrDisable(EffectObjRoot,Bool_Destroy,plyLength)
EffectObjRoot:SetActive(true)
self.SetParticalSystemLength(EffectObjRoot,plyLength)
local Num_NeedTimeLength=ParticalSystemEffectCtrl.Plylength
self.TimerManager=Timer.New(function (NeedTimeLength)
if EffectObjRoot==nil then
if self.TimerManager~=nil then
self.TimerManager:Stop();
self.TimerManager = nil;
return
end
end
if NeedTimeLength<=0 and EffectObjRoot~=nil then
if self.TimerManager~=nil then
self.TimerManager:Stop();
self.TimerManager = nil;
end
if Bool_Destroy then
--销毁自己
Destroy(EffectObjRoot)
else
--隐藏自己
EffectObjRoot:SetActive(false)
end
end
end ,1,Num_NeedTimeLength,false,true);
self.TimerManager:Start();
end
--[[1,times,false,true);
local index=0;
local ChildObjArr={};
function FindEffectChildObj(effectObj)
local ParticleSystem= effectObj:GetComponent('ParticleSystem')
if ParticleSystem~=nil then
index=index+1;
ChildObjArr[index]=ParticleSystem
end
if effectObj.transform.childCount>0 then
for i,v in pairs(effectObj.transform) do
local trans=v;
FindEffectChildObj(trans.gameObject)
end
end
end
--]]
--移除特效计时器(粒子特效播放计算时长销毁时用了计时器,需要在调用界面销毁时手动移除计时器)
function ParticalSystemEffectCtrl.RemoveTimerForParticalSystem()
if self.TimerManager~=nil then
self.TimerManager:Stop();
self.TimerManager = nil;
end
end
--层级暂留
function ParticalSystemEffectCtrl.Hierarchy()
end
return self