Effect(五)—— IEffect
来源:互联网 发布:腾鹰软件 编辑:程序博客网 时间:2024/06/05 14:58
目录为:Assets/Scripts/Effect/目录下
IEffect.cs
这个类是其他effect类的父类
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;//这是个父类public class IEffect{ //特效类型 public enum ESkillEffectType { eET_Passive, //被动 eET_Buff, //Buff eET_BeAttack, //被攻击 eET_FlyEffect, //飞翔特效 eET_Normal, //普通 eET_Area, eET_Link, //Link } //基本信息 public GameObject obj = null; //特效GameObject物体 public Transform mTransform = null; protected float currentTime = 0.0f; //特效运行时间 public bool isDead = false; //特效是否死亡 public string resPath; //特效资源路径 public string templateName; //特效模板名称 public Int64 projectID = 0; //特效id 氛围服务器创建id 和本地生成id public uint skillID; //特效对应的技能id public float cehuaTime = 0.0f; //特效运动持续时间或者是特效基于外部设置的时间 策划配置 public float artTime = 0.0f; //美术设置的特效时间 美术配置 public float lifeTime = 0; //特效生命周期,0为无限生命周期 public UInt64 enOwnerKey; //技能释放者 public UInt64 enTargetKey; //技能受击者 public AudioSource mAudioSource = null; //声音 //运动信息 public Vector3 fPostion; public Vector3 fixPosition; public Vector3 dir; public Vector3 distance; public ESkillEffectType mType; //创建时保存所有的ParticleSystem private List<ParticleSystem> particleSystemList = new List<ParticleSystem>(); //创建时有TrailRender保存所有的TrailRender private List<TrailRenderer> trailRenderList = new List<TrailRenderer> (); private EffectScript effectScript = null; //构造函数 public IEffect() { enOwnerKey = 0; enTargetKey = 0; } //获取Transform public Transform GetTransform() { if (mTransform == null) { mTransform = obj.transform; } return mTransform; } //特效创建接口 public void Create() { //创建的时候检查特效projectId,服务器没有设置生成本地id CheckProjectId (); //获取特效模板名称 templateName = ResourceCommon.getResourceName (resPath); //使用特效缓存机制 //缓存池里没有,就立即加载一个再返回 obj = GameObjectPool.Instance.GetGO (resPath); if (null == obj) { Debug.LogError("load effect object failed in IEffect::Create" + resPath); return; } //创建完成,修改特效名称,便于调试 obj.name = templateName + "_" + projectID.ToString (); //加载完成 OnLoadComplete (); //获取美术特效脚本信息 //EffectScript在另一个地方,很简单的一个类 effectScript = obj.GetComponent<EffectScript> (); if (effectScript == null) { Debug.LogError("cant not find the effect script in " + resPath); return; } artTime = effectScript.lifeTime; //美术配置时间为0, 使用策划时间 if (effectScript.lifeTime == 0) { lifeTime = cehuaTime; } //否则使用美术时间 else { lifeTime = artTime; } //特效等级不同,重新设置 EffectLodLevel effectLevel = effectScript.lodLevel; EffectLodLevel curLevel = EffectManager.Instance.mLodLevel; if (effectLevel != curLevel) { //调整特效显示等级 AdjustEffectLodLevel (curLevel); } } public void Release() { //放回pool GameObjectPool.Instance.ReleaseGO (resPath, obj, PoolObjectType.POT_Effect); //如果有声音,释放声音 if (mAudioSource != null) { SceneSoundManager.Instance.remove (mAudioSource); } } //调整特效等级 public void AdjustEffectLodLevel(EffectLodLevel level) { List<GameObject> childObjs = new List<GameObject> (); FindAllChildWithTag (obj, "loweffect", ref childObjs); //高效果 if (level == EffectLodLevel.High) { foreach (GameObject child in childObjs) { child.SetActive (true); } } //低效果 else { foreach (GameObject child in childObjs) { child.SetActive (false); } } //保存特效等级信息 effectScript.lodLevel = level; } //检查projectId,为0表示没有设置,生成本地id public void CheckProjectId() { if (projectID == 0) { projectID = EffectManager.Instance.GetLocalId (); } } //特效更新接口 public virtual void Update() { currentTime += Time.deltaTime; //如果是非循环特效并且当前时间大于生命周期,特效死亡 if (lifeTime != 0 && currentTime > lifeTime) { isDead = true; } } //特效是否死亡 public virtual bool IsDead() { return isDead; } public virtual void UnLoadCompelte() { } //遍历收集特效预制件中的信息 public void RecusionParticleSystemObject(GameObject gameObject) { //获取子ParticleSystem for (int i = 0; i < gameObject.transform.childCount; i++) { Transform ts = gameObject.transform.GetChild (i); GameObject psObj = ts.gameObject; if (psObj) { //保存ParticleSystem ParticleSystem psComp = psObj.GetComponent<ParticleSystem> (); if (psComp != null) { particleSystemList.Add (psComp); } //保存TrailRender // TrailRenderer // RecusionParticleSystemObject(psObj); } } } //获取所有指定Tag的子物体 public void FindAllChildWithTag(GameObject gameObject, string tag, ref List<GameObject> childObjs) { for (int i = 0; i < gameObject.transform.childCount; i++) { Transform ts = gameObject.transform.GetChild (i); GameObject psObj = ts.gameObject; if (psObj) { if (psObj.tag == tag) { childObjs.Add (psObj); continue; } //开始递归 FindAllChildWithTag (psObj, tag, ref childObjs); } } }}
阅读全文
0 0
- Effect(五)—— IEffect
- Unity3D自学笔记——星际2技能系统分析(五)Effect(Damage)
- Effect(一)—— fyRibbonTrail
- Effect(二)—— fyDragRibbon
- Effect(三)—— fyLinkRibbon
- Effect(四)—— AbsorbEffect
- Effect(六)—— BeAttackEffect
- Effect(七)—— BuffEffect
- Effect(八)—— NormalEffect
- Effect(九)—— OnlySoundEffect
- Effect(十)—— PassitiveEffect
- Effect(十一)—— SkillAreaEffect
- Effect(十二)—— ExplodeEffect
- Effect(十三)—— flyEffect
- Effect(十四)—— EffectManager
- Effect(十五)—— EffectScript
- Effect(十六)—— SetActiveScript
- Effect(十七)—— SM_MoveThis
- Win10+Python+virtualenv 环境配置
- 详述 Sublime Text 打开 GBK 格式乱码的解决方法
- 文本文件与二进制文件区别
- PHP开发APP接口全过程(一)
- 高斯朴素贝叶斯
- Effect(五)—— IEffect
- 关于tomcat默认编码方式ISO-8859-1及转换方法
- 使用apache下的FTP功能,出现java.net.SocketException: Software caused connection abort: recv failed
- 本地计算机无法识别正在用于访问远程共享文件夹的用户名
- 对象行为型模式——命令模式(Command)
- 网络状态判断需要以上两个权限
- Solr的Bug之出现乱码或者查不到结果。
- Linux系统基础(十一)
- 洛谷P1856