private void OnTriggerStay(Collider other) { if (trigOn) { Vector3 dir = (other.transform.position - transform.position).normalized; RaycastHit hit; if (Physics.Raycast(transform.position, dir, out hit, FOV_radius, raycast)) { if (hit.transform.gameObject.name == "Target") { float dot = Vector3.Dot(dir, transform.forward); if (dot > Mathf.Cos(FOV_width * Mathf.Deg2Rad) || hit.distance < 1) { if (hit.distance < attackRadius) { ai.attackTarget = hit.collider.gameObject; ai.ChangeState("StartAttack"); } else { ai.targetPos = hit.point; ai.ChangeState("StartChase"); } } } } } }
void Death() { if (currentHealth <= 0 && canDie) { enemyAI.ChangeState(AIStates.DEAD); isAlive = false; } else { return; } }
public void Execute() { if (enemy.EnemyStat.Target != null) { enemy.ChangeState(new BattleAttackState()); } }
override public void Execute(EnemyAI enemyAi) { enemyAi.Trace(); if (!enemyAi.bSight()) { enemyAi.ChangeState(EnemyPatrol.Instance()); } }
override public void Execute(EnemyAI enemyAi) { enemyAi.Stand(); if (enemyAi.bSight()) { enemyAi.ChangeState(EnemyTrace.Instance()); } }
//检测被攻击 在玩家攻击时检测!!!!! public void AttackedByPlayer() { for (int i = 0; i < allEnemy.Count; i++) { EnemyAI tmpEnemy = allEnemy[i].GetComponent <EnemyAI>(); if (Attack.SquareAttack(player, tmpEnemy.transform, PlayerData.forwordDistance, PlayerData.rightDistance)) { tmpEnemy.ChangeState((sbyte)Data.AnimationCount.Attacked); tmpEnemy.ReduceBlood(PlayerData.hurt); } if (Attack.SectorAttack(player, tmpEnemy.transform, PlayerData.radius, PlayerData.angle)) { tmpEnemy.ChangeState((sbyte)Data.AnimationCount.Attacked); tmpEnemy.ReduceBlood(PlayerData.hurt); } } }
private void Evade() { //turn left or right //GetComponent<Rigidbody2D>().velocity = transform.up * enemy.EnemyStat.EnemySpeed; EvadeTimer += Time.deltaTime; if (EvadeTimer >= EvadeDuration) { enemy.ChangeState(new IdleState()); } }
private void Idle() { //speed-up //enemyStat.EnemySpeed += enemyStat.EnemyAccel; /*if(enemy.EnemyStat.Target != null){ * enemy.ChangeState (new InRangeState()); * }*/ IdleTimer += Time.deltaTime; if (IdleTimer >= IdleDuration) { enemy.ChangeState(new EvadeState()); } }