public void Activate() { int behaviorIndex = this.ChooseIdleBehavior(); this.currentBehavior = this.behaviors[behaviorIndex]; this.currentBehavior.StartBehavior(); }
private void ShootLaser() { Collider[] colls = Physics.OverlapSphere(transform.position, laserLength, LayerMask.GetMask("Alley")); float closestDist = float.MaxValue; target = null; foreach (var item in colls) { Mob itemMob = item.GetComponent <Mob>(); if (itemMob) { Vector3 subVec = item.transform.position - transform.position; float sqrDist = subVec.sqrMagnitude; if (sqrDist <= closestDist) { closestDist = sqrDist; target = itemMob; } } } if (target) { AnimEventBehavior laserStartBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>(); laserStartBehavior.Init(BehaviorPriority.Skill, new AnimEventBData("laser", mainSoundPlayer, "LaserCharge", 1.0f), laserChargeTime); fsm.DirectAddBehavior(laserStartBehavior); LaserBehavior laserStayBehavior = ScriptableObject.CreateInstance <LaserBehavior>(); laserStayBehavior.Init(BehaviorPriority.Skill, new LaserBData(target, mainSoundPlayer, "Laser", 0.25f), laserDuration); fsm.DirectAddBehavior(laserStayBehavior); IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>(); idleBehavior.Init(BehaviorPriority.Basic, null, 2.5f); fsm.DirectAddBehavior(idleBehavior); } }
private void SpawnMobs() { AnimEventBehavior animBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>(); animBehavior.Init(BehaviorPriority.Skill, new AnimEventBData("spawn", mainSoundPlayer, "BossSpawnAura2", 1.0f), 3.0f); fsm.DirectAddBehavior(animBehavior); IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>(); idleBehavior.Init(BehaviorPriority.Basic, null, 1.0f); fsm.DirectAddBehavior(idleBehavior); }
private void FireBalls() { BaseBehavior animBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>(); animBehavior.Init(BehaviorPriority.Skill, new AnimEventBData("ball", mainSoundPlayer, "BossBallAura", 0.5f), 2.0f); fsm.DirectAddBehavior(animBehavior); IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>(); idleBehavior.Init(BehaviorPriority.Basic, null, 2.0f); fsm.DirectAddBehavior(idleBehavior); }
private void MeleeAttack() { Collider[] colls = Physics.OverlapSphere(transform.position, attRad, LayerMask.GetMask("Alley")); if (colls.Length > 0) { Vector3 subVec = colls[0].transform.position - transform.position; subVec.y = 0; if (subVec.sqrMagnitude <= sqrAttRad) { transform.forward = subVec.normalized; BaseBehavior attBehavior = ScriptableObject.CreateInstance <AnimEventBehavior>() as BaseBehavior; attBehavior.Init(BehaviorPriority.Att, new AnimEventBData("att"), 2.0f); fsm.DirectAddBehavior(attBehavior); IdleBehavior idleBehavior = ScriptableObject.CreateInstance <IdleBehavior>(); idleBehavior.Init(BehaviorPriority.Basic, null, 0.2f); fsm.DirectAddBehavior(idleBehavior); } } }
// 根据战士类型和阵营来创建AI,根据阵营和战士类型来创建目标选择策略 public AIBase createAI(Toy pToy, HERO_TYPE eHeroType, CAMP_TYPE eCampType) { AIBase pAI = null; switch (eHeroType) { case HERO_TYPE.AI_WARRIOR: // 战士 case HERO_TYPE.AI_MASTER: // 法师 case HERO_TYPE.AI_TANKING: // 肉盾 case HERO_TYPE.AI_SHOOTER: // 射手 case HERO_TYPE.AI_WIZARD: // 巫师 case HERO_TYPE.AI_PARADIN: // 奶骑 { pAI = createHeroAI(eCampType); IBehavior pBehavior = null; // 设置IDLE行为 pBehavior = new IdleBehavior(); pAI.setIdleBehavior(pBehavior); // 设置思考行为 pBehavior = new ThinkBehavior(); pAI.setThinkBehavior(pBehavior); // 冷却行为 pBehavior = new CoolDownBehavior(); pAI.setCoolDownBehavior(pBehavior); // 设置攻击行为 pBehavior = new AttackBehavior(); pAI.setAttackBehavior(pBehavior); // 设置选择策略 IChoiceStrategy pChoiceStrategy = createChooseStrategy(); pAI.setChoiceStrategy(pChoiceStrategy); } break; default: break; } return pAI; }
private void ChangeBehavior() { int behaviorIndex = this.ChooseIdleBehavior(); if (this.currentBehaviorIndex == behaviorIndex && this.currentBehavior != null) { this.currentBehavior.Poke(); this.framesBeforeChange = this.GenerateDuration(); return; } if (this.currentBehavior != null) { this.currentBehavior.StopBehavior(); } this.currentBehavior = this.behaviors[behaviorIndex]; this.currentBehavior.StartBehavior(); this.framesBeforeChange = this.GenerateDuration(); this.currentBehaviorIndex = behaviorIndex; }
public void SetIdleBehavior(IdleBehavior beh, uint ms) { fIdleBeh = beh; fIdleMs = ms; fIdleTimer.Stop(); if (beh != IdleBehavior.DoNothing) { fIdleTimer.AutoReset = true; fIdleTimer.Interval = Convert.ToDouble(ms); fIdleTimer.Start(); } }
private BaseBehavior GetBehaviorEntity(BehaviorType bt) { if (!behaviorUnions.ContainsKey(bt)) { BaseBehavior bbh = null; switch (bt) { case BehaviorType.BT_Idle: bbh = new IdleBehavior(); break; case BehaviorType.BT_FourcesLocal: bbh = new FourcesLocalBehavior(); break; case BehaviorType.BT_Torque: bbh = new TorqueBehavior(); break; case BehaviorType.BT_ForwardCtlMove: bbh = new ForwardControlMoveBehavior(); break; case BehaviorType.BT_WorldForceCtlMove: bbh = new WorldForceControlMoveBehavior(); break; case BehaviorType.BT_4DOFForwardMove: bbh = new DOF4ForwardMoveBehavior(); break; case BehaviorType.BT_6DOFForwardMove: bbh = new DOF6ForwardMoveBehavior(); break; case BehaviorType.BT_StopRotate: bbh = new StopRotateBehavior(); break; case BehaviorType.BT_StopMove: bbh = new StopMoveBehavior(); break; case BehaviorType.BT_TurnToTarget: bbh = new TurnToTargetBehavior(); break; case BehaviorType.BT_UpTurnToTarget: bbh = new UpTurnToTargetBehavior(); break; case BehaviorType.BT_TurningMove: bbh = new TurningMoveBehavior(); break; case BehaviorType.BT_StopThenMoveToTarget: bbh = new StopThenMoveToTargetBehavior(); break; case BehaviorType.BT_SmoothMoveToTarget: bbh = new SmoothMoveToTargetBehavior(); break; case BehaviorType.BT_SmoothMoveTargets: bbh = new SmoothMoveTargetsBehavior(); break; case BehaviorType.BT_Leap: bbh = new LeapBehavior(); break; case BehaviorType.BT_LeapBreak: bbh = new LeapBreakBehavior(); break; case BehaviorType.BT_BindMove: bbh = new BindMoveBehavior(); break; case BehaviorType.BT_Slied: bbh = new SliedBehavior(); break; default: bbh = new IdleBehavior(); break; } behaviorUnions.Add(bt, bbh); } return(behaviorUnions[bt]); }