void Update() { if (m_CurrCount < m_MaxCount) { if (Time.time > m_PrevCreatTime + UnityEngine.Random.Range(1.5f, 3.5f)) { m_PrevCreatTime = Time.time; //创建怪 GameObject objClone = RoleMgr.Instance.LoadRole(monsterName, RoleType.Monster); objClone.transform.parent = transform; objClone.transform.position = transform.TransformPoint(new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f))); RoleCtrl roleCtrl = objClone.GetComponent <RoleCtrl>(); roleCtrl.BornPoint = objClone.transform.position; RoleInfoMonster roleInfo = new RoleInfoMonster(); roleInfo.RoelServerID = DateTime.Now.Ticks; roleInfo.RoleID = 1; roleInfo.CurrHP = roleInfo.MaxHP = 1000; roleInfo.NickName = "偷书盗贼"; roleCtrl.Init(RoleType.Monster, roleInfo, new RoleMonsterAI(roleCtrl)); roleCtrl.OnRoleDie = RoleDie; m_CurrCount++; } } }
/// <summary> /// 刷怪 /// </summary> void Update() { if (m_CurrCount < m_MaxCount) { if (Time.time > m_CreateTime) { m_CreateTime = Time.time + UnityEngine.Random.Range(1.5f, 3.5f); GameObject moster = RoleMgr.Instance.LoadRole(RoleType.Monster, m_MonsterName); moster.transform.parent = transform; //在指定区域随机刷处怪物 moster.transform.position = transform.transform.TransformPoint(new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f))); m_CurrCount++; RoleInfoMonster roleInfo = new RoleInfoMonster(); roleInfo.NickName = "骑兵"; roleInfo.RoleServerId = DateTime.Now.Ticks; roleInfo.MaxHp = roleInfo.CurrHp = 1000; roleInfo.RoleId = 1; RoleCtrl ctrl = moster.GetComponent <RoleCtrl>(); ctrl.BornPos = transform; ctrl.OnDie = OnMonsterDie; RoleMonsterAI ai = new RoleMonsterAI(ctrl); ctrl.Init(RoleType.Monster, roleInfo, ai); } } }
private void CreateMonster() { //if (m_CurrentCreateCount > 0) return; m_Index = UnityEngine.Random.Range(0, m_CurrentRegionMonsterList.Count); GameLevelMonsterEntity levelMonsterEntity = m_CurrentRegionMonsterList[m_Index]; SpriteEntity spriteEntity = SpriteDBModel.Instance.Get(levelMonsterEntity.SpriteId); if (spriteEntity == null || levelMonsterEntity == null) { return; } if (!monsterCreateDic.ContainsKey(m_Index)) { monsterCreateDic[m_Index] = levelMonsterEntity.SpriteCount; } string prefabName = spriteEntity.PrefabName; monsterCreateDic[m_Index]--; if (monsterCreateDic[m_Index]-- < 0) { monsterCreateDic.Remove(m_Index); } Transform obj = m_Pool.Spawn(prefabName); obj.position = m_CurRegionCtrl.GetMonsterBornPos; obj.localEulerAngles = Vector3.zero; obj.localScale = Vector3.one; RoleCtrl ctrl = obj.GetComponent <RoleCtrl>(); ctrl.OnRoleDie = OnRoleDieCallBack; ctrl.OnRoleDestory = OnRoleDestoryCallBack; RoleInfoMonster info = new RoleInfoMonster(spriteEntity); info.RoleId = ++m_TempIndex; info.RoleNickName = spriteEntity.Name; info.Level = spriteEntity.Level; //info.Exp = spriteEntity.RewardExp; info.MaxHP = spriteEntity.HP; info.CurrentHP = spriteEntity.HP; info.MaxMP = spriteEntity.MP; info.CurrentMP = spriteEntity.MP; info.Attack = spriteEntity.Attack; info.Defense = spriteEntity.Defense; info.Hit = spriteEntity.Hit; info.Dodge = spriteEntity.Dodge; info.Res = spriteEntity.Res; info.Cri = spriteEntity.Cri; info.Fighting = spriteEntity.Fighting * 100; ctrl.Init(RoleType.Monster, info, new GameLevel_RoleMonsterAI(ctrl, info)); ctrl.Born(obj.position); ctrl.ViewRange = spriteEntity.Range_View; m_CurrentCreateCount++; }
private void OnRoleDieCallBack(RoleCtrl ctrl) { //GameLevelCtrl.Instance.CurPassTime = (int)m_FightingTime; //UIViewMgr.Instance.OpenView(UIViewType.GameLevelVictory); m_KillRegionMonsterCount++; RoleInfoMonster info = (RoleInfoMonster)ctrl.CurRoleInfo; if (info != null) { GameLevelMonsterEntity monsterEntity = GameLevelMonsterDBModel.Instance.GetRegionMonsterInfo(m_GameLevelId, m_Grade, m_CurRegionCtrl.RegionId, info.SpriteEntity.Id); if (monsterEntity != null) { if (monsterEntity.Exp > 0) { UITipView.Instance.SetUI(0, monsterEntity.Exp.ToString()); GameLevelCtrl.Instance.CurGameLevelTotalExp += monsterEntity.Exp; } if (monsterEntity.Gold > 0) { UITipView.Instance.SetUI(1, monsterEntity.Gold.ToString()); GameLevelCtrl.Instance.CurGameLevelTotalGold += monsterEntity.Gold; } if (GameLevelCtrl.Instance.CurGameLevelKillMonsterDic.ContainsKey(monsterEntity.SpriteId)) { GameLevelCtrl.Instance.CurGameLevelKillMonsterDic[monsterEntity.SpriteId] += 1; } else { GameLevelCtrl.Instance.CurGameLevelKillMonsterDic[monsterEntity.SpriteId] = 1; } } } if (m_KillRegionMonsterCount >= m_CurrentRegionMonsterCount) { m_CurSelectRegionIndex++; if (LastRegion) { //胜利 m_IsFighting = false; GameLevelCtrl.Instance.CurPassTime = (int)m_FightingTime; TimeMgr.Instance.SetTimeScaleDuration(0.3f, 3); StartCoroutine("FightingWinIE"); return; } EnterRegion(m_CurSelectRegionIndex); } }
/// <summary> 刷怪 </summary> private void CreateMonster() { //临时测试 //if (m_CurrRegionCreateMonsterCount>=1) return; if (m_RegionMonsterList.Count == 0) { return; } for (int i = 0; i < 1; i++) { m_Index = UnityEngine.Random.Range(0, m_RegionMonsterCountList.Count); if (m_RegionMonsterCountList[m_Index] == 0) { i--; } } int monsterId = m_RegionMonsterList[m_Index].MonsterId; RoleInfoMonster monsterInfo = new RoleInfoMonster(); MonsterEntity monsterEntity = MonsterDBModel.Instance.Get(monsterId); monsterInfo.MonsterEntity = monsterEntity; monsterInfo.GameLevelMonsterEntity = GameLevelMonsterDBModel.Instance.GetGameLevelMonsterEntity(GameLevelCtrl.Instance.ChapterId, GameLevelCtrl.Instance.GameLevelId, m_CurrRegionIndex + 1, monsterId); monsterInfo.RoleId = ++m_MonsterTempId; m_KillMonsterIdList.Add(monsterInfo.RoleId); monsterInfo.SetMonsterData(monsterEntity); //从池子中取怪 Transform monsterTrans = m_MonsterPool.Spawn(MonsterDBModel.Instance.Get(monsterId).PrefabName); //将怪放在出生点 Transform monsterBornPos = m_CurrRegionctrl.MonsterBornPos[UnityEngine.Random.Range(0, m_CurrRegionctrl.MonsterBornPos.Length)]; RoleCtrl monsterCtrl = monsterTrans.GetComponent <RoleCtrl>(); monsterCtrl.PatrolRadius = monsterEntity.PatrolRadius; monsterCtrl.ViewRadius = monsterEntity.ViewRadius; monsterCtrl.Speed = monsterEntity.MoveSpeed; monsterCtrl.Init(RoleType.Monster, monsterInfo, new GameLevelRoleMonsterAI(monsterCtrl, monsterInfo)); monsterCtrl.OnRoleDie = OnRoleDieCallBack; monsterCtrl.OnRoleDestroy = OnRoleDestroyCallBack; monsterCtrl.SetBornPoint(monsterBornPos.TransformPoint(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f))); m_RegionMonsterCountList[m_Index]--; m_CurrRegionCreateMonsterCount++; }
public GameLevelRoleMonsterAI(RoleCtrl roleCtrl, RoleInfoMonster info) { CurrRole = roleCtrl; //m_Info = CurrRole.CurrRoleInfo as RoleInfoMonster; m_Info = info; }
public GameLevel_RoleMonsterAI(RoleCtrl roleCtrl, RoleInfoMonster info) { CurRoleCtrl = roleCtrl; RoleInfo = info; }