Exemple #1
0
        //移动
        public override void MovePos(Vector3 pos)
        {
            //add by lzp
            if (!CoreEntry.GameStart)
            {
                return;
            }
            if (m_agent == null)
            {
                // Debug.LogError("NavMeshAgent is null");
                return;
            }

            m_agent.enabled = true;
            if (m_agent.gameObject.activeSelf && m_agent.enabled)//为什么有时候是关闭的??add by Alex 20160606
            {
                m_agent.SetDestination(pos);
            }

            m_dstPos = pos;
            //设置isRuning的时候,阻止update运行
            m_isRuning = false;

            //开始移动
            EventParameter param = EventParameter.Get();

            param.goParameter = this.gameObject;

            m_eventMgr.TriggerEvent(GameEvent.GE_ACTOR_MOVE_BEGIN, param);

            //0.01秒后开始计算距离
            Invoke("BeginRun", 0.01f);
        }
Exemple #2
0
        // Update is called once per frame
        void Update()
        {
            if (m_dstPos != Vector3.zero)
            {
                float distance = Vector3.Distance(m_transform.position, m_dstPos);

                Vector3 curDir = m_dstPos - m_transform.position;
                curDir.Normalize();

                //方向点乘,防止走过头
                float dot = Vector3.Dot(curDir, m_dstDir);

                if (distance <= 0.1f || dot < 0)
                {
                    m_dstPos = Vector3.zero;

                    //todo:移动到目的地
                    EventParameter param = EventParameter.Get();
                    param.goParameter = this.gameObject;

                    m_eventMgr.TriggerEvent(GameEvent.GE_PLAYER_MOVE_END, param);
                    //renwuzhixiangSetActive(false);
                    return;
                }

                //移动
                MoveToDir(m_dstDir);

                Debug.DrawLine(m_transform.position, m_dstPos, Color.red);
            }
            else
            {
                Debug.DrawLine(m_transform.position, m_dstPos, Color.red);
            }
        }
Exemple #3
0
        //移动
        public override void MovePos(Vector3 pos)
        {
            //add by lzp
            if (!CoreEntry.GameStart)
            {
                return;
            }
            if (m_agent == null)
            {
                //Debug.LogError("NavMeshAgent is null");
                return;
            }

            //计算路径点
            m_agent.enabled = true;
            NavMeshPath path = new NavMeshPath();

            m_listPath.Clear();
            bool ret = m_agent.CalculatePath(pos, path);

            if (ret)
            {
                if (path.corners.Length < 2)
                {
                    return;
                }

                for (int i = 0; i < path.corners.Length; ++i)
                {
                    m_listPath.Add(path.corners[i]);
                }

                m_isRuning  = true;
                m_startTime = Time.time;
            }
            else
            {
                //Debug.LogError("CalculatePath() error! pos="+m_transform.position.ToString("f4"));
            }

            m_agent.enabled = false;

            if (m_isRuning)
            {
                //开始移动
                EventParameter param = EventParameter.Get();
                param.goParameter = this.gameObject;

                m_eventMgr.TriggerEvent(GameEvent.GE_ACTOR_MOVE_BEGIN, param);
            }
        }
Exemple #4
0
        //加载非主角
        void LoadMonster()
        {
            OneZoneData zoneData = m_gameDBMgr.GetAimPosZoneData(m_curMonsterGroupId, m_sceneMgr.curOpenZoneID);

            if (zoneData == null)
            {
                LogMgr.UnityError("Load zoneData error. mapid:" + m_curMonsterGroupId + " zoneid:" + m_sceneMgr.curOpenZoneID);
                return;
            }
            //add by lzp
            SetGuidSkill();

            StartLoadMonster();
            //所有的种怪
            SpawnMonster[] monsters = m_gameDBMgr.GetSpawnMonsterInfo(m_curMonsterGroupId);
            for (int i = 0; i < monsters.Length; ++i)
            {
                if (!monsters[i].enable)
                {
                    continue;
                }

                if (CurMonsterWaveSeq != monsters[i].waveSequence)
                {
                    continue;
                }

                Vector3 pos = monsters[i].pos;

                //是否当前区域怪
                if (zoneData != null && m_isLoadZone)
                {
                    if (pos.x < zoneData.startPos.x || pos.x > zoneData.endPos.x ||
                        pos.z < zoneData.startPos.z || pos.z > zoneData.endPos.z)
                    {
                        continue;
                    }
                }

                //刷怪时间扰动,避免所有怪一起刷新动作太整齐的问题
                if (m_curWaveTriggerInfo.turbulenceTime > 0f)
                {
                    m_TurbulenceSpawnMonsters.Add(monsters[i]);
                }
                else
                {
                    SpawnActor(monsters[i]);
                }
            }

            //发送怪物被加载完了
            m_eventMgr.TriggerEvent(GameEvent.GE_EVENT_AFTER_MONSTER_LOADED, null);

            if (m_TurbulenceSpawnMonsters.Count > 0)
            {
                InvokeRepeating("TurbulenceSpawnMonster", Random.Range(0f, m_curWaveTriggerInfo.turbulenceTime / m_TurbulenceSpawnMonsters.Count),
                                m_curWaveTriggerInfo.turbulenceTime / m_TurbulenceSpawnMonsters.Count);
            }

            //m_bCurWaveLoaded = true;

            if (m_bWaveLoop == false && IsLoopMonsterAllDeath() == false)
            {
                m_bWaveLoop = true;
                TriggerLoopWave();
            }

            // 下一波怪在这波开始时延时刷新情况
            if (IsOpenZoneFinalWaveMonster() == false &&
                (GetNextWaveTrigType() == WTC_TYPE.LASTWAVEBEGAN || GetNextWaveTrigType() == WTC_TYPE.ZONE))
            {
                CurMonsterWaveSeq++;
                UpdateWaveTriggerInfo();
                //m_bCurWaveLoaded = false;

                if (m_curWaveTriggerInfo.trigType == (int)WTC_TYPE.LASTWAVEBEGAN)
                {
                    if (m_curWaveTriggerInfo.arg1 > 0)
                    {
                        StartDelayLoadMonster();
                        Invoke("DelaySpawnMonster", m_curWaveTriggerInfo.arg1);
                    }
                    else
                    {
                        LoadMonster();
                    }
                }
                else if (m_curWaveTriggerInfo.trigType == (int)WTC_TYPE.ZONE)
                {
                    m_bNeedCheckZone = true;
                    SetMonsterTips(true);
                }
            }
        }