Unity ARPG 特效管理学习总结
三个脚本
1.Effect Scripts//挂载在特效上,用在统计特效播放时间
2.Effect //具体的特效逻辑
3.Effect Manger//特效的管理,控制生成和销毁
具体的代码
//Effect Scripts
class EffectScripts{
public float lifeTime;
}
//Effect
class Effect{
public float lifeTime;
private EffectScripts myScripts;
public Transform mytrans;
public void InitEffect(string effectpath ,Vector3 pos){
GameObject loadRouobj=GameManger.Instance.Resource<GameObject>(effectpath);
Gameobject obj=GameObject.Instantiate(loadRouobj);
mytrans=obj.transform;
myScripts=obj.GetComponent<EffectScripts> as EffectScripts;
if(myScripts==null){
Debug.LogError("没有挂载EffectScripts脚本");
return;
}
lifeTime=myScripts.lifeTime;
}
}
//EffectManger
public class EffectManger:MonoBehaviour{
private static EffectManger _Instance;
public static EffectManger Instance{
get{
if(_Instance==null)
{
_Instance=GameOject.FindObjectOfType(Type(EffecManger)) as EffectManger;
if(_Instance==null)
{
GameObject obj=new GameObject();
obj.AddComponent<EffectManger>();
}
}
return _Instance;
}
}
list<Effect> list=new list<Effect>():
public void CreeatEffect(string pathname, Vectot3 pos)
{
Effect effect=new Effect();
effect.InitEffect(pathname,pos);
list.Add(effect);
}
public void Update(){
if(list.Count>0)
{
for(int i=1;i<list.Count;i++)
{
if(list[i]==null)
{
continue;
}
list[i].life-=Time.daltaTime;
if(list[i].life<=0)
{
GameObject.Destroy(list[i].mytrans.gameobject);
list.Remove(list[i]);
}
}
}
}