public override void Action(float deltaTime, Enemy enemy) { print("追跡中"); WalkEnemy l_WalkEnemy = enemy.GetComponent <WalkEnemy>(); //プレイヤーが見えている場合 if (l_WalkEnemy.CanSeePlayer()) { //プレイヤーの場所へ向かう l_WalkEnemy.m_Agent.destination = l_WalkEnemy.GetPlayer().transform.position; //プレイヤーとの距離 float distance = Vector3.Distance(l_WalkEnemy.GetEnemyPosition(), l_WalkEnemy.GetPlayer().transform.position); //プレイヤーとの距離を調べて、近ければ攻撃状態へ if (distance < m_StopDistance) { l_WalkEnemy.AgentStop(); enemy.ChangeState(EnemyStatus.Attack); } } //見失った場合 else { //追跡中(見失い)に状態変更 enemy.ChangeState(EnemyStatus.ChasingButLosed); } }
public override void Action(float deltaTime, Enemy enemy) { print("巡回しない戻る状態"); WalkEnemy l_WalkEnemy = enemy.GetComponent <WalkEnemy>(); //プレイヤーが見えている場合 if (l_WalkEnemy.CanSeePlayer()) { enemy.ChangeState(EnemyStatus.Chasing); } //見失った場合 else { //元の位置に向かう l_WalkEnemy.m_Agent.destination = l_WalkEnemy.GetStartPosition(); //元の位置と距離を比べる if (Vector3.Distance(l_WalkEnemy.GetStartPosition(), gameObject.transform.position) <= 0.2f) { l_WalkEnemy.AgentStop(); //元の角度を向く l_WalkEnemy.transform.rotation = Quaternion.Slerp(l_WalkEnemy.transform.rotation, l_WalkEnemy.GetStartAngle(), Time.deltaTime * 2.0f); //元の向きに向き終わったか調べる if (Quaternion.Angle(l_WalkEnemy.transform.rotation, l_WalkEnemy.GetStartAngle()) <= 0.5f) { //巡回しない状態に遷移 l_WalkEnemy.ChangeState(EnemyStatus.NonRoundState); } } } }
public override void Action(float deltaTime, Enemy enemy) { print("巡回しない状態"); WalkEnemy l_WalkEnemy = enemy.GetComponent <WalkEnemy>(); l_WalkEnemy.m_Agent.isStopped = true; //プレイヤーが見えている場合 if (l_WalkEnemy.CanSeePlayer()) { l_WalkEnemy.m_Agent.isStopped = false; enemy.ChangeState(EnemyStatus.Chasing); } //見失った場合 else { } }