public static void Play(EFFECT_ID id, GameObject caster, GameObject[] aims = null, TakeDmgCallBackPack takedmagepack = null, EffectInst.FinishCallBack finishcallback = null, EffectInstanceCallBack effectinstancecallback = null, ParamData data = null) { EffectAssetsData ead = EffectAssetsData.GetData((int)id); if (ead == null) { return; } EffectBehaviourData ebd = EffectBehaviourData.GetData(ead.behaviour_id_); Vector3 vcaster = new Vector3(0f, 0f, 0f); Vector3[] vaims = null; if (null != aims) { vaims = new Vector3[aims.Length]; } if (ebd.effect_positionType == EffectBehaviourData.EffectPositionType.Up) { if (caster != null) { vcaster = new Vector3(caster.collider.bounds.center.x, caster.collider.bounds.center.y + caster.collider.bounds.size.y / 2, caster.collider.bounds.center.z); } if (aims != null) { for (int iCount = 0; iCount < aims.Length; ++iCount) { vaims[iCount] = new Vector3(aims[iCount].collider.bounds.center.x, aims[iCount].collider.bounds.center.y + aims[iCount].collider.bounds.size.y / 2, aims[iCount].collider.bounds.center.z); } } } else if (ebd.effect_positionType == EffectBehaviourData.EffectPositionType.Center) { if (caster != null) { vcaster = caster.collider.bounds.center; } if (aims != null) { for (int iCount = 0; iCount < aims.Length; ++iCount) { vaims[iCount] = aims[iCount].collider.bounds.center; } } } else if (ebd.effect_positionType == EffectBehaviourData.EffectPositionType.Down) { if (caster != null) { vcaster = new Vector3(caster.collider.bounds.center.x, caster.collider.bounds.center.y - caster.collider.bounds.size.y / 2, caster.collider.bounds.center.z); } if (aims != null) { for (int iCount = 0; iCount < aims.Length; ++iCount) { vaims[iCount] = new Vector3(aims[iCount].collider.bounds.center.x, aims[iCount].collider.bounds.center.y - aims[iCount].collider.bounds.size.y / 2, aims[iCount].collider.bounds.center.z); } } } else { } Play(id, vcaster, vaims, takedmagepack, finishcallback, effectinstancecallback, data); }
public static void Play(EFFECT_ID id, Vector3 caster, Vector3[] aims = null, TakeDmgCallBackPack takedmagepack = null, EffectInst.FinishCallBack finishcallback = null, EffectInstanceCallBack effectinstancecallback = null, ParamData data = null, Transform[] parents = null) { EffectAssetsData ead = EffectAssetsData.GetData((int)id); if (ead == null) { ClientLog.Instance.LogError("could not find the effect asset by id: " + id + " caster position is " + caster); return; } int SoundId = EffectAssetsData.GetData((int)id).SoundID; SoundTools.PlaySound((SOUND_ID)SoundId); ////////////////////////////////////////////////////////////////////////// // aims 有可能是null // 但在进场景那一刻 有可能会出现 需要有目标的特效没有目标 可能会导致卡死 // 考虑是否加一个完成回调 EffectBehaviourData ebd = EffectBehaviourData.GetData(ead.behaviour_id_); if (ebd != null) { EffectBehaviourData.CASTTYPE castType = ebd.cast_type_; int maxCount = (aims == null? 0: aims.Length); // int maxCount = aims.Length; if (castType.Equals(EffectBehaviourData.CASTTYPE.SameTime) || castType.Equals(EffectBehaviourData.CASTTYPE.OneByOne)) { if (aims != null) { for (int i = 0; i < maxCount; ++i) { EffectMgr.Instance.LoadEffect( id, EffectInstCallBack, new MetaData(takedmagepack == null? null: takedmagepack.hit_1, takedmagepack == null? null: takedmagepack.hit_2, takedmagepack == null? null: takedmagepack.effect, takedmagepack == null? null: takedmagepack.changeVal, i == aims.Length - 1? finishcallback: null, caster, new Vector3[] { aims[i] }, data == null? i: data.iParam, effectinstancecallback, data == null? new ParamData(i): data, parents)); } } else { EffectMgr.Instance.LoadEffect(id, EffectInstCallBack, new MetaData(takedmagepack == null? null: takedmagepack.hit_1, takedmagepack == null? null: takedmagepack.hit_2, takedmagepack == null? null: takedmagepack.effect, takedmagepack == null ? null : takedmagepack.changeVal, finishcallback, caster, aims, 0, effectinstancecallback, data, parents)); } } else if (castType.Equals(EffectBehaviourData.CASTTYPE.OnlyOne)) { EffectMgr.Instance.LoadEffect(id, EffectInstCallBack, new MetaData(takedmagepack == null? null: takedmagepack.hit_1, takedmagepack == null? null: takedmagepack.hit_2, takedmagepack == null? null: takedmagepack.effect, takedmagepack == null ? null : takedmagepack.changeVal, finishcallback, caster, aims, 0, effectinstancecallback, data, parents)); } } else { EffectMgr.Instance.LoadEffect(id, EffectInstCallBack, new MetaData(takedmagepack == null? null: takedmagepack.hit_1, takedmagepack == null? null: takedmagepack.hit_2, takedmagepack == null? null: takedmagepack.effect, takedmagepack == null ? null : takedmagepack.changeVal, finishcallback, caster, aims, 0, effectinstancecallback, data, parents)); } }