public uint AttachEffect(int id, string mountname) { if (!DataManager.EffectTable.ContainsKey(id)) { return(uint.MaxValue); } EffectTableItem effectitem = DataManager.EffectTable[id] as EffectTableItem; bool nullmount = string.IsNullOrEmpty(mountname); MeshVisual attachparent = mVisual; if (!nullmount) { if (mountname[0] == '%') { attachparent = mWeapon; } mountname = mountname.Substring(1); } Transform bone = attachparent.GetBoneByName(mountname); if (bone == null) { bone = attachparent.VisualTransform; } TransformData trans = new TransformData(); trans.Scale = Vector3.one * effectitem.scale; trans.notFollow = effectitem.notFollow; return(SceneManager.Instance.GetCurScene().GetParticleManager().AddParticle(effectitem.effect_name, effectitem.loop, bone, trans, effectitem.limitry)); }
/// <summary> /// 给单位添加特效. /// </summary> public static void AddEffect2Object(BattleUnit owner, uint effectID, string bindpoint, float dir = float.NaN, bool loop = false, ClientBehaviourIdContainer cont = null) { uint runtimeID = uint.MaxValue; if (effectID != uint.MaxValue) { runtimeID = owner.AddEffect(effectID, bindpoint, dir); if (runtimeID == uint.MaxValue) { ErrorHandler.Parse(ErrorCode.ConfigError, "添加特效" + effectID + "失败"); } } EffectTableItem eti = DataManager.EffectTable[effectID] as EffectTableItem; if (eti != null && eti.loop && cont != null) { if (cont.threeDEffect2Role_0 == uint.MaxValue) { cont.threeDEffect2Role_0 = runtimeID; } else { cont.threeDEffect2Role_1 = runtimeID; } } }
virtual public uint AddEffect(uint resId, string boneName, float dir = float.NaN, AttachMountType atype = AttachMountType.AttachCount) { if (this.Scene == null) { return(uint.MaxValue); } if (!DataManager.EffectTable.ContainsKey(resId)) { return(uint.MaxValue); } EffectTableItem item = DataManager.EffectTable[resId] as EffectTableItem; SceneParticleManager mng = this.Scene.GetParticleManager(); Transform trans = null; if (atype != AttachMountType.Wing) { if (!string.IsNullOrEmpty(boneName) && boneName.StartsWith("%")) { atype = AttachMountType.Weapon; boneName = boneName.Replace("%", ""); } } TransformData data = new TransformData(); data.notFollow = item.notFollow; data.Scale = new Vector3(item.scale, item.scale, item.scale); if (!float.IsNaN(dir)) { data.Rot = new Vector3(0f, dir * Mathf.Rad2Deg, 0f); } if (!string.IsNullOrEmpty(item.soundId)) { string[] array = item.soundId.Split('|'); SoundManager.Instance.Play( int.Parse(array[UnityEngine.Random.Range(0, array.Length)]), item.soundDelay ); } uint instID = mng.AddParticle(item.effect_name, item.loop, trans, data, item.limitry); ParticleAttachMent attach = new ParticleAttachMent(); attach.parent = trans == null ? null : trans.gameObject; attach.particleid = instID; attach.transform = data; attach.socketname = boneName; attach.atype = atype; attach.resid = resId; AttachParticle(attach); return(instID); }
public static uint AddEffect2MV(MeshVisual visual, int effectid, string mount, SceneParticleManager mng) { if (!DataManager.EffectTable.ContainsKey(effectid)) { return(uint.MaxValue); } if (!string.IsNullOrEmpty(mount)) { mount = mount.Replace("%", ""); } EffectTableItem item = DataManager.EffectTable[effectid] as EffectTableItem; if (item == null) { return(uint.MaxValue); } Transform trans = visual.GetBoneByName(mount); if (trans == null) { trans = visual.VisualTransform; } TransformData data = new TransformData(); data.notFollow = item.notFollow; data.Scale = new Vector3(item.scale, item.scale, item.scale); //不跟随释放者的特效,取挂点的方向 if (item.notFollow && trans != null) { if (trans != null) { data.Rot = trans.rotation.eulerAngles; } else { data.Rot = Vector3.zero; } } if (!string.IsNullOrEmpty(item.soundId)) { string[] array = item.soundId.Split('|'); SoundManager.Instance.Play( int.Parse(array[UnityEngine.Random.Range(0, array.Length)]), item.soundDelay ); } return(mng.AddParticle(item.effect_name, item.loop, trans, data, item.limitry)); }
private IEnumerator generateVisual(int effectID) { if (mVisual != null) { ParticleVisual.DestroyParticle(mVisual); mVisual = null; } EffectTableItem res = DataManager.EffectTable[effectID] as EffectTableItem; if (res != null) { mVisual = ParticleVisual.CreateParticle(res.effect_name, null); if (mVisual == null) { yield break; } mVisual.Scale = res.scale; bool needWaitForSomeTime = !mVisual.IsCompleteOrDestroy; //在这里处理缩放数值 while (mVisual != null && !mVisual.IsCompleteOrDestroy) { yield return(1); } if (mVisual == null || mVisual.IsDestroy) { yield break; } mVisual.Visual.SetActive(false); SetRotation(DefaultRotation); OnChangePosition(GetPosition(), GetPosition()); //if (needWaitForSomeTime) // yield return 10; if (mVisual != null && mVisual.Visual != null) { mVisual.Visual.SetActive(true); } } }
virtual public uint AddEffect(uint resId, Vector3 pos, float dir = float.NaN) { if (this.Scene == null) { return(uint.MaxValue); } if (!DataManager.EffectTable.ContainsKey(resId)) { return(uint.MaxValue); } EffectTableItem item = DataManager.EffectTable[resId] as EffectTableItem; SceneParticleManager mng = this.Scene.GetParticleManager(); TransformData data = new TransformData(); data.Scale = new Vector3(item.scale, item.scale, item.scale); data.notFollow = item.notFollow; data.Pos = pos; if (!float.IsNaN(dir)) { data.Rot = new Vector3(0f, dir * Mathf.Rad2Deg, 0f); } if (!string.IsNullOrEmpty(item.soundId)) { string[] array = item.soundId.Split('|'); SoundManager.Instance.Play( int.Parse(array[UnityEngine.Random.Range(0, array.Length)]), item.soundDelay ); } uint instID = mng.PlayFx(item.effect_name, item.loop, null, data, -1, null, item.limitry); ParticleAttachMent attach = new ParticleAttachMent(); attach.parent = null; attach.atype = AttachMountType.AttachCount; attach.particleid = instID; attach.resid = resId; AttachParticle(attach); return(instID); }
/// <summary> /// 播放场景特效. /// </summary> public static void AddSceneEffect(uint effectID, Vector3 position, float dir = float.NaN, bool loop = false, ClientBehaviourIdContainer cont = null) { uint runtimeID = uint.MaxValue; BaseScene scn = SceneManager.Instance.GetCurScene(); if (scn != null && effectID != uint.MaxValue) { runtimeID = scn.CreateEffect((int)effectID, Vector3.one, position, dir, null, !loop); if (runtimeID == uint.MaxValue) { ErrorHandler.Parse(ErrorCode.ConfigError, "添加特效" + effectID + "失败"); } } EffectTableItem eti = DataManager.EffectTable[effectID] as EffectTableItem; if (eti != null && eti.loop && cont != null) { cont.threeDEffectInScene = runtimeID; } }
public void OnWingSuccess() { AttachMent attachment = mAttachMents[(int)AttachMountType.Wing]; if (attachment == null) { return; } WingCommonTableItem commonRes = DataManager.WingCommonTable[mWingID] as WingCommonTableItem; if (commonRes == null) { return; } if (!DataManager.EffectTable.ContainsKey(commonRes.effectNomal)) { return; } EffectTableItem item = DataManager.EffectTable[commonRes.effectNomal] as EffectTableItem; ParticleUtility.AddEffect2MV(attachment.visual as MeshVisual, commonRes.effectNomal, commonRes.modelSlot, ParticleMng); }
/// <summary> /// 更新挂接特效 /// </summary> public void UpdateAttachParticle() { SceneParticleManager particlemng = SceneManager.Instance.GetCurScene().GetParticleManager(); int nCount = mAttachParticles.Count; List <ParticleAttachMent> toDel = null; for (int i = 0; i < nCount; ++i) { ParticleAttachMent attach = mAttachParticles[i]; ParticleItem item = particlemng.GetParticle(attach.particleid); if (attach == null || item == null || item.IsDead()) { if (toDel == null) { toDel = new List <ParticleAttachMent>(); } toDel.Add(attach); continue; } //将特效更新到对应位置上 if (attach.parent == null || item.parent == null) { PrimitiveVisual aVisual = null; if (attach.atype != AttachMountType.AttachCount) { AttachMent buildinAttach = mAttachMents[(int)attach.atype]; if (buildinAttach != null) { aVisual = buildinAttach.visual; } } else { aVisual = mVisual; } if (aVisual != null && aVisual is MeshVisual && aVisual.Visual != null) { Transform tr = null; if (string.IsNullOrEmpty(attach.socketname)) { tr = aVisual.VisualTransform; } else { tr = (aVisual as MeshVisual).GetBoneByName(attach.socketname); if (tr == null) { tr = aVisual.VisualTransform; } } attach.parent = tr.gameObject; EffectTableItem effectitem = DataManager.EffectTable[attach.resid] as EffectTableItem; //不跟随释放者的特效,取挂点的方向 if (effectitem.notFollow && tr != null && attach.transform != null) { if (tr != null) { attach.transform.Rot = tr.rotation.eulerAngles; } else { attach.transform.Rot = Vector3.zero; } } } if (attach.parent != null) { if (item.visual != null && item.visual.Visual != null) { item.visual.Visual.SetActive(true); } DressingRoom.AttachParticleTo(item, attach.parent.transform); } } } if (toDel != null) { foreach (ParticleAttachMent at in toDel) { mAttachParticles.Remove(at); } } }