/// <summary> /// 刷新技能弹道(依赖对象池,必须在对象池初始化结束以后使用) by吴江 /// </summary> /// <param name="_id">删除的弹道ID,如果为负数则这次变化为增加弹道</param> protected void RefreshAbilityBallisticCurve(int _id) { if (_id < 0)//增加弹道 by吴江 { FDictionary dataList = sceneMng.AbilityBallisticCurveInfoDictionary; foreach (int item in dataList.Keys) { if (!abilityBallisticCurveDic.ContainsKey(item)) { //从对象池中取出 by吴江 AbilityBallisticCurveInfo info = dataList[item] as AbilityBallisticCurveInfo; if (info != null) { abilityBallisticCurveDic[item] = GameCenter.spawner.SpawnAbilityBallisticCurve(info); } else { Debug.LogError(item + " 弹道数据为空!"); } } } } else//删除弹道 by吴江 { if (abilityBallisticCurveDic.ContainsKey(_id)) { //归还给对象池 by吴江 abilityBallisticCurveDic[_id].needDespawed = true; abilityBallisticCurveDic.Remove(_id); } } }
/// <summary> /// 从对象池中取出弹道的对象 by吴江 /// </summary> /// <param name="_pos"></param> /// <param name="_rot"></param> /// <returns></returns> public AbilityBallisticCurve SpawnAbilityBallisticCurve(AbilityBallisticCurveInfo _info) { AbilityBallisticCurve abilityBallisticCurve = abilityBallisticCurvePool.Request(_info.StartPos, Quaternion.Euler(_info.Direction)); abilityBallisticCurve.OnSpawned(_info); return(abilityBallisticCurve); }
public void OnSpawned(AbilityBallisticCurveInfo _info) { info = _info; needDespawed = false; starttime = 0; if (info == null) { OnDespawned(); return; } curStartPos = info.StartPos; speed = info.Speed; addSpeed = info.AddSpeed; lockLastDis = 0; if (info.IsLock && info.Target != null) { targetTransform = info.Target.HitPoint; } if (effect != null) { GameCenter.spawner.DespawnEffecter(effect); } GameCenter.spawner.SpawnEffecter(info.EffectName, -1, (x) => { //清理原特效,主要因为两次异步可能导致多个特效加载很慢的特效同时存在 by吴江 if (effect != null) { GameCenter.spawner.DespawnEffecter(effect); } int count = this.transform.childCount; if (count > 0) { PoolEffecter[] p = new PoolEffecter[count]; for (int i = 0; i < count; i++) { effect = this.transform.GetChild(i).gameObject.GetComponent <PoolEffecter>(); p[i] = effect; } foreach (var item in p) { GameCenter.spawner.DespawnEffecter(item); } } count = this.transform.childCount; if (count > 0) { for (int i = 0; i < count; i++) { Destroy(this.transform.GetChild(i).gameObject); } } effect = x; effect.transform.parent = this.transform; effect.transform.localPosition = Vector3.zero; effect.transform.localEulerAngles = Vector3.zero; this.transform.localEulerAngles = info.Direction; Vector3 now = info.StartPos + info.Direction * 10; Vector3 velocity = now - transform.position; curStartPos = info.StartPos; if (velocity != Vector3.zero) { transform.forward = velocity; } starttime = Time.time; if (!this.gameObject.activeSelf) { LoadUtil.SetActive(this.gameObject, true); } }, false); base.OnSpawned(); transform.position = _info.StartPos; GameCenter.soundMng.PlaySound(info.PlaySound, SoundMng.GetSceneSoundValue(transform, GameCenter.curMainPlayer.transform), false, true); }