Example #1
0
    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
        {
        }
    }