// 更新触发状态(继承自sdBehaviourState)aa public override void UpdateState() { if (mIsInState != true) { return; } if (mCurrentCount == 0) { return; } mCurrentDelayTime -= Time.deltaTime; if (mCurrentDelayTime <= 0.0f) { // 当前技能不存在则随机一个技能aa if (mCurrentSkillID == -1) { mCurrentSkillID = RandomSkill(); } // 检查技能范围,尝试释放技能aa bool bCastSkill = false; if (mCurrentSkillID > 0) { MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent; sdGameMonster kMonster = kMonsterAutoFight.Monster; if (mDetectDistance) { sdSkill kSkill = kMonster.skillTree.getSkill(mCurrentSkillID); if (kSkill != null) { sdBaseState kState = kSkill.actionStateList[0]; float fDistance = (int)kState.stateData["CastDistance"] * 0.001f; HeaderProto.ESkillObjType eTergetType = (HeaderProto.ESkillObjType)kState.stateData["byTargetType"]; float fCurrentDistance = 0.0f; sdBehaviourStateBlock kBehaviourStateBlock = mBehaviourAdvancedState.BehaviourStateBlock; if (eTergetType == HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY) { fCurrentDistance = kBehaviourStateBlock.UpdateDistanceOfNearestEnemy(mBehaviourAdvancedState); } else { fCurrentDistance = kBehaviourStateBlock.UpdateDistanceOfNearestFriend(mBehaviourAdvancedState); } if (fCurrentDistance < fDistance) { kMonster.CastSkill(mCurrentSkillID); bCastSkill = true; } } } else { kMonster.CastSkill(mCurrentSkillID); bCastSkill = true; } } // 释放技能成功则延迟一个mIntervalTime,否则仅仅延迟2s检查一次直到释放成功aa if (bCastSkill) { mCurrentSkillID = -1; mCurrentDelayTime = mIntervalTime; --mCurrentCount; } else { mCurrentDelayTime = 2.0f; } } }