Ejemplo n.º 1
0
    void Update()
    {
        if (state == EnemyState.Walk || state == EnemyState.Chase) // 見回りまたはキャラクターを追いかける状態
        {
            if (state == EnemyState.Chase)                         // キャラクターを追いかける状態であればキャラクターの目的地を再設定
            {
                setPosition.SetDestination(playerTransform.position);
            }

            if (enemyController.isGrounded)
            {
                velocity = Vector3.zero;
                animator.SetFloat("Speed", 2.0f);
                direction = (setPosition.GetDestination() - transform.position).normalized;
                transform.LookAt(new Vector3(setPosition.GetDestination().x, transform.position.y, setPosition.GetDestination().z));
                velocity = direction * walkSpeed;
            }

            if (state == EnemyState.Walk)
            {
                if (Vector3.Distance(transform.position, setPosition.GetDestination()) < 0.7f)                 //目的地に到着したかどうかの判定
                {
                    SetState("wait");
                    animator.SetFloat("Speed", 0.0f);
                }
            }
            else if (state == EnemyState.Chase)
            {
                if (Vector3.Distance(transform.position, setPosition.GetDestination()) < 1f)                 // 攻撃する距離だったら攻撃
                {
                    SetState("attack");
                }
            }
        }
        else if (state == EnemyState.Wait)           // 到着していたら一定時間待つ
        {
            elapsedTime += Time.deltaTime;

            if (elapsedTime > waitTime)             // 待ち時間を越えたら次の目的地を設定
            {
                SetState("walk");
            }
        }
        else if (state == EnemyState.Freeze)           // 攻撃後のフリーズ状態
        {
            elapsedTime += Time.deltaTime;

            if (elapsedTime > freezeTime)
            {
                SetState("walk");
            }
        }
        velocity.y += Physics.gravity.y * Time.deltaTime;
        enemyController.Move(velocity * Time.deltaTime);
    }
Ejemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        // 見回りまたはキャラクターを追いかける状態
        if (state == EnemyState.Walk || state == EnemyState.Chase)
        {
            // キャラクターを追いかける状態であればキャラクターの目的地を再設定
            if (state == EnemyState.Chase)
            {
                setPosition.SetDestination(playerTransform.position);
            }
            if (enemyController.isGrounded)
            {
                velocity = Vector3.zero;
                animator.SetFloat("Speed", 2.0f);
                direction = (setPosition.GetDestination() - transform.position).normalized;
                transform.LookAt(new Vector3(setPosition.GetDestination().x, transform.position.y, setPosition.GetDestination().z));
                velocity = direction * walkSpeed;
            }

            // 目的地に到着したかどうかの判定
            if (Vector3.Distance(transform.position, setPosition.GetDestination()) < 0.5f)
            {
                SetState(EnemyState.Wait);
                animator.SetFloat("Speed", 0.0f);
            }
            // 到着していたら一定時間待つ
        }
        else if (state == EnemyState.Wait)
        {
            elapsedTime += Time.deltaTime;

            // 待ち時間を越えたら次の目的地を設定
            if (elapsedTime > waitTime)
            {
                SetState(EnemyState.Walk);
            }
        }
        velocity.y += Physics.gravity.y * Time.deltaTime;
        enemyController.Move(velocity * Time.deltaTime);
    }
Ejemplo n.º 3
0
    // Update is called once per frame
    void Update()
    {
        //死んだとき
        //HPが0以下なら
        if (HP <= 0)
        {
            Debug.Log("EnemyDead");
            SetState(EnemyState.Dead);
        }

        // 見回りまたはキャラクターを追いかける
        if (state == EnemyState.Walk || state == EnemyState.Chase)
        {
            // キャラクターを追いかける状態であればキャラクターの目的地を再設定
            if (state == EnemyState.Chase)
            {
                setPosition.SetDestination(playerTransform.position);
            }
            if (enemyController.isGrounded)
            {
                velocity = Vector3.zero;
                animator.SetFloat("Speed", 2.0f);
                direction = (setPosition.GetDestination() - transform.position).normalized;
                transform.LookAt(new Vector3(setPosition.GetDestination().x, transform.position.y, setPosition.GetDestination().z));
                velocity = direction * walkSpeed;
            }

            if (state == EnemyState.Walk)
            {
                // 目的地に到着したかどうかの判定
                if (Vector3.Distance(transform.position, setPosition.GetDestination()) < 0.7f)
                {
                    SetState(EnemyState.Wait);
                    animator.SetFloat("Speed", 0.0f);
                }
            }
            else if (state == EnemyState.Chase)
            {
                // 攻撃する距離だったら攻撃
                if (Vector3.Distance(transform.position, setPosition.GetDestination()) < 1f)
                {
                    SetState(EnemyState.Attack);
                }
            }
            // 到着していたら一定時間待つ
        }
        else if (state == EnemyState.Wait)
        {
            elapsedTime += Time.deltaTime;

            // 待ち時間を越えたら次の目的地を設定
            if (elapsedTime > waitTime)
            {
                SetState(EnemyState.Walk);
            }
        }
        // 攻撃後のフリーズ状態
        else if (state == EnemyState.Freeze)
        {
            elapsedTime += Time.deltaTime;

            if (elapsedTime > freezeTime)
            {
                SetState(EnemyState.Walk);
            }
        }
        velocity.y += Physics.gravity.y * Time.deltaTime;
        enemyController.Move(velocity * Time.deltaTime);
    }
Ejemplo n.º 4
0
    void Update()
    {
        //見回りまたはプレイヤーを追いかける状態
        if (state == EnemyState.Walk || state == EnemyState.Chase)
        {
            //プレイヤーを追いかける状態であればキャラクターの目的地を再設定
            if (state == EnemyState.Chase)
            {
                setPosition.SetDestination(playerTransform.position);
            }
            if (enemyController.isGrounded)             //接地判定
            {
                velocity = Vector3.zero;                //ベクトルを初期化
                animator.SetFloat("Speed", 2.0f);       //アニメーターのスピード値を設定
                direction = (setPosition.GetDestination() - transform.position).normalized;
                transform.LookAt(new Vector3(setPosition.GetDestination().x, transform.position.y, setPosition.GetDestination().z));
                velocity = direction * walkSpeed;
            }

            //目的地に到着したか判定
            if (state == EnemyState.Walk)
            {
                if (Vector3.Distance(transform.position, setPosition.GetDestination()) < 0.7f)
                {
                    SetState(EnemyState.Wait);
                    animator.SetFloat("Speed", 0.0f);
                }
            }
            else if (state == EnemyState.Chase)
            {
                //攻撃する距離だったら攻撃
                if (Vector3.Distance(transform.position, setPosition.GetDestination()) < 1f)
                {
                    SetState(EnemyState.Attack);
                }
                //到着したら一定時間止まる
            }
            else if (state == EnemyState.Wait)
            {
                elapsedTime += Time.deltaTime;
                //待ち時間を越えたら次の目的地へ行く
                if (elapsedTime > waitTime)
                {
                    SetState(EnemyState.Walk);
                }
                //攻撃後のフリーズ状態
            }
            else if (state == EnemyState.Freeze)
            {
                elapsedTime += Time.deltaTime;

                if (elapsedTime > freezeTime)
                {
                    SetState(EnemyState.Walk);
                }
            }
            if (state == EnemyState.Dead)
            {
                return;
            }
        }
        velocity.y += Physics.gravity.y * Time.deltaTime;                       //重力を働かせる
        enemyController.Move(velocity * Time.deltaTime);                        //指定速度で移動
    }