コード例 #1
0
    /// <summary>
    /// 初始AttackNpc数据;
    /// </summary>
    /// <returns></returns>
    void InitAttackNpc(AttackNpcSpawnData spawnData)
    {
        AttackNpcData attackNpcData = DataManager.s_AttackNpcDataManager.GetData(spawnData.AttackNpcID);

        if (attackNpcData == null)
        {
            return;
        }
        AttackNpc attackNpc = new AttackNpc(spawnData.AttackNpcID);

        if (attackNpc != null)
        {
            m_AttackNpcDic.Add(spawnData.ID, attackNpc);
        }
    }
コード例 #2
0
    /// <summary>
    /// 创建AttackNpc;
    /// </summary>
    /// <returns></returns>
    public void CreateAttackNpc(AttackNpcSpawnData spawnData)
    {
        if (spawnData == null)
        {
            return;
        }

        AttackNpcData attackNpcData = DataManager.s_AttackNpcDataManager.GetData(spawnData.AttackNpcID);

        if (attackNpcData == null)
        {
            return;
        }

        AttackNpc  attackNpc = m_AttackNpcDic [spawnData.ID];
        Quaternion rotate    = Quaternion.Euler(new Vector3(0, spawnData.Orient * Mathf.Rad2Deg, 0));
        GameObject prefab    = ResourcesManager.Instance.LoadUnitObject(attackNpcData.Model, UNIT_TYPE.ATTACK_NPC);
        GameObject npcobj    = GameObject.Instantiate(prefab) as GameObject;

        npcobj.transform.position = spawnData.Position;
        npcobj.transform.rotation = rotate;

        UnityEngine.AI.NavMeshAgent agent = npcobj.AddComponent <UnityEngine.AI.NavMeshAgent> ();
        agent.speed        = 0;
        agent.acceleration = 0;
        agent.angularSpeed = 0;
        //agent.avoidancePriority =
        agent.height           = attackNpcData.Height;
        agent.radius           = attackNpcData.Radius;
        agent.stoppingDistance = 0.5f;

        CharacterController collider = npcobj.AddComponent <CharacterController> ();

        collider.height = attackNpcData.Height;
        collider.radius = attackNpcData.Radius;
        collider.center = Vector3.up * Mathf.Max(collider.height / 2.0f, collider.radius);
        npcobj.SetLayerRecursively(LayerMask.NameToLayer("AttackNpc"));

        AttackNpcController controller = npcobj.AddComponent <AttackNpcController> ();

        m_AttackNpcControllerDic.Add(spawnData.ID, controller);
        controller.CurCombatUnit = attackNpc;
        controller.PatrolRadius  = spawnData.PatrolRadius;
    }
コード例 #3
0
    /// <summary>
    /// 加载NPC数据;
    /// </summary>
    public void LoadBattleData()
    {
        m_BattleDataDic = new Dictionary <int, BattleData>();
        string textAsset = ResourcesManager.Instance.LoadConfigXML(COMMDEF.XML_BATTLE_TEXT).text;

        XmlDocument xmlDoc = new XmlDocument();

        xmlDoc.LoadXml(textAsset);
        XmlNode datas = xmlDoc.SelectSingleNode("BattleDatas");

        XmlNodeList list = datas.ChildNodes;

        if (list == null || list.Count < 1)
        {
            return;
        }

        foreach (XmlNode node in list)
        {
            XmlElement element = node as XmlElement;
            if (!element.Name.Equals("BattleData"))
            {
                continue;
            }
            BattleData info = new BattleData();

            info.ID      = CommonHelper.Str2Int(element.GetAttribute("ID"));
            info.Name    = element.GetAttribute("Name");
            info.SceneId = CommonHelper.Str2Int(element.GetAttribute("SceneId"));

            XmlNodeList data = element.ChildNodes;
            if (data == null || data.Count < 1)
            {
                continue;
            }

            foreach (XmlNode subNode in data)
            {
                XmlElement subElement = subNode as XmlElement;
                if (subElement.Name.Equals("WarriorSpawnData"))
                {
                    XmlNodeList spawnDatas = subElement.ChildNodes;
                    if (spawnDatas == null || spawnDatas.Count < 1)
                    {
                        continue;
                    }

                    foreach (XmlNode ssubNode in spawnDatas)
                    {
                        XmlElement ssubElement = ssubNode as XmlElement;
                        if (ssubElement.Name.Equals("WarriorSpawnPos"))
                        {
                            WarriorSpawnPos spawnPos = new WarriorSpawnPos();

                            float subx = CommonHelper.Str2Float(ssubElement.GetAttribute("PosX"));
                            float suby = CommonHelper.Str2Float(ssubElement.GetAttribute("PosY"));
                            float subz = CommonHelper.Str2Float(ssubElement.GetAttribute("PosZ"));
                            spawnPos.Position = new Vector3(subx, suby, subz);
                            spawnPos.Orient   = CommonHelper.Str2Float(ssubElement.GetAttribute("Orient"));

                            //加入npc信息
                            if (info.WarriorSpawnList == null)
                            {
                                info.WarriorSpawnList = new List <WarriorSpawnPos>();
                            }
                            info.WarriorSpawnList.Add(spawnPos);
                        }
                    }
                }
                else if (subElement.Name.Equals("AttackNpcWaveData"))
                {
                    XmlNodeList npcWave = subElement.ChildNodes;
                    if (npcWave == null || npcWave.Count < 1)
                    {
                        continue;
                    }

                    if (info.AttackNpcSpawnWaveList == null)
                    {
                        info.AttackNpcSpawnWaveList = new List <AttackNpcSpawnWave>();
                    }

                    AttackNpcSpawnWave wave = new AttackNpcSpawnWave();
                    wave.SpawnTime = CommonHelper.Str2Float(subElement.GetAttribute("SpawnTime"));

                    foreach (XmlNode ssubNode in npcWave)
                    {
                        XmlElement ssubElement = ssubNode as XmlElement;
                        if (ssubElement.Name.Equals("AttackNpcSpawnData"))
                        {
                            AttackNpcSpawnData spawnData = new AttackNpcSpawnData();
                            spawnData.ID          = CommonHelper.Str2Int(ssubElement.GetAttribute("ID"));
                            spawnData.AttackNpcID = CommonHelper.Str2Int(ssubElement.GetAttribute("AttackNpcID"));
                            float subx = CommonHelper.Str2Float(ssubElement.GetAttribute("PosX"));
                            float suby = CommonHelper.Str2Float(ssubElement.GetAttribute("PosY"));
                            float subz = CommonHelper.Str2Float(ssubElement.GetAttribute("PosZ"));
                            spawnData.Position     = new Vector3(subx, suby, subz);
                            spawnData.Orient       = CommonHelper.Str2Float(ssubElement.GetAttribute("Orient"));
                            spawnData.PatrolRadius = CommonHelper.Str2Float(ssubElement.GetAttribute("PatrolRadius"));
                            spawnData.AI           = CommonHelper.Str2Int(ssubElement.GetAttribute("AI"));
                            wave.AttackNpcSpawnList.Add(spawnData);
                        }
                    }

                    info.AttackNpcSpawnWaveList.Add(wave);
                }
            }

            info.AttackNpcSpawnWaveList.Sort(delegate(AttackNpcSpawnWave a, AttackNpcSpawnWave b)
            {
                return(a.SpawnTime.CompareTo(b.SpawnTime));
            });

            //加入副本信息
            if (!m_BattleDataDic.ContainsKey(info.ID))
            {
                m_BattleDataDic.Add(info.ID, info);
            }
        }
    }