コード例 #1
0
ファイル: DungeonStage.cs プロジェクト: atom-chen/tianyu
 /// <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);
         }
     }
 }
コード例 #2
0
    /// <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);
    }
コード例 #3
0
    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);
    }