/// <summary> /// 创建战斗角色模型 /// </summary> private void CreateBattleModel() { _heroObject = new List <LYXHeroObject>(); for (int i = 0, len = _heroEntityList.Count; i < len; i++) { LYXHeroEntity own = _heroEntityList[i]; LYXHeroObject ownObject = LCSCompHelper.LoadResource <LYXHeroObject>("RoleModel/" + own.HeroModel); if (ownObject == null) { continue; } ownObject.mHeroEnity = own; ownObject.mMoveEndPos = mEndMovePos; string parPath = own.FriendAndFoe == 1 ? "own" : "enemy"; InitHeroObjectPosition(ownObject.transform, parPath + "/" + own.HeroPos); if (own.FriendAndFoe == 1) { ownObject.transform.localScale = new Vector3(-1, 1, 1); } ownObject.mBatManage = this; _heroObject.Add(ownObject); } _isIntoBattle = true; }
/// <summary> /// 移出死亡的侠客 /// </summary> /// <param name="hobj">死亡的侠客</param> public void RemoveDieHero(LYXHeroObject hobj) { if (_heroObject == null || _heroObject.Count <= 0) { return; } _heroObject.Remove(hobj); }
/// <summary> /// 清理特效 /// </summary> public void ClearEffect() { mHeroObj.RemoveEffect(this); mHeroObj = null; mTargetObj = null; mOffset = Vector3.zero; mTweenPos = null; mSkillEntity = null; mDestroy = null; GameObject.DestroyObject(gameObject); }
/// <summary> /// 播放怒气技 /// </summary> /// <param name="heroId">侠客id</param> public void OnPlayAngerSkill(string heroId) { for (int i = 0, len = _heroObject.Count; i < len; i++) { LYXHeroObject item = _heroObject[i]; if (item.mHeroEnity.HeroId == heroId) { item.OnPlayAngerSkill(); return; } } }
/// <summary> /// 处理技能函数参数 /// </summary> /// <param name="args"></param> public void VerifySkillFunArgs(params object[] args) { if (args.Length > 1) { mHeroObj = (LYXHeroObject)args[1]; } if (args.Length > 2) { mTargetObj = (LYXHeroObject)args[2]; } if (args.Length > 3) { mOffset = (Vector3)args[3]; } }
/// <summary> /// 寻找目标 /// </summary> /// <returns></returns> public bool MoveAction() { mTargetHero = mBatManage.GetNearHero(this); if (mTargetHero == null) { return(true); } transform.LookAt(mTargetHero.transform); if (Vector3.Distance(mTargetHero.transform.position, transform.position) <= mHeroEnity.AttackDistance) { return(true); } // 向目标对象移动 Vector3 dirVect = (mTargetHero.transform.position - transform.position).normalized; transform.position = transform.position + dirVect * mHeroEnity.HeroMoveSpeed * Time.deltaTime; return(false); }
/// <summary> /// 得到最近的侠客 /// </summary> /// <returns></returns> public LYXHeroObject GetNearHero(LYXHeroObject sourceHero) { List <LYXHeroObject> objs = _heroObject.FindAll(x => x.mHeroEnity.FriendAndFoe != sourceHero.mHeroEnity.FriendAndFoe && !x.mHeroEnity.IsHeroDie); if (objs.Count <= 0) { return(null); } LYXHeroObject retObj = objs[0]; float dis = Vector3.Distance(transform.position, retObj.transform.position); for (int i = 0, len = objs.Count; i < len; i++) { float temp = Vector3.Distance(transform.position, objs[i].transform.position); if (dis > temp) { retObj = objs[i]; dis = temp; } } return(retObj); }
/// <summary> /// 处理技能函数参数 /// </summary> /// <param name="args"></param> public void VerifySkillFunArgs(params object[] args) { if (args.Length > 1) mHeroObj = (LYXHeroObject)args[1]; if (args.Length > 2) mTargetObj = (LYXHeroObject)args[2]; if (args.Length > 3) mOffset = (Vector3)args[3]; }
/// <summary> /// 寻找目标 /// </summary> /// <returns></returns> public bool MoveAction() { mTargetHero = mBatManage.GetNearHero(this); if (mTargetHero == null) return true; transform.LookAt(mTargetHero.transform); if (Vector3.Distance(mTargetHero.transform.position, transform.position) <= mHeroEnity.AttackDistance) return true; // 向目标对象移动 Vector3 dirVect = (mTargetHero.transform.position - transform.position).normalized; transform.position = transform.position + dirVect * mHeroEnity.HeroMoveSpeed * Time.deltaTime; return false; }
/// <summary> /// 移出死亡的侠客 /// </summary> /// <param name="hobj">死亡的侠客</param> public void RemoveDieHero(LYXHeroObject hobj) { if (_heroObject == null || _heroObject.Count <= 0) return; _heroObject.Remove(hobj); }
/// <summary> /// 得到最近的侠客 /// </summary> /// <returns></returns> public LYXHeroObject GetNearHero(LYXHeroObject sourceHero) { List<LYXHeroObject> objs = _heroObject.FindAll(x => x.mHeroEnity.FriendAndFoe != sourceHero.mHeroEnity.FriendAndFoe && !x.mHeroEnity.IsHeroDie); if (objs.Count <= 0) return null; LYXHeroObject retObj = objs[0]; float dis = Vector3.Distance(transform.position, retObj.transform.position); for (int i = 0, len = objs.Count; i < len; i++) { float temp = Vector3.Distance(transform.position, objs[i].transform.position); if (dis > temp) { retObj = objs[i]; dis = temp; } } return retObj; }