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
 void Start()
 {
     soundManager = SoundManager.Instance;
     animator     = GetComponent <Animator>();
     setPosition  = GetComponent <SetPosition>();
     destination  = setPosition.GetDestination();
     velocity     = Vector3.zero;
     arrived      = false;
     elapsedTime  = 3f;
     SetState(EnemyState.Walk);
     particle = GetComponentInChildren <ParticleSystem>();
 }
Ejemplo n.º 3
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.º 4
0
    // Start is called before the first frame update
    void Start()
    {
        enemyController = GetComponent <CharacterController>(); //コントローラーを取得

        animator = GetComponent <Animator>();                   //アニメーターを取得

        setPosition = GetComponent <SetPosition>();             //SetPositionスクリプトの値を取得

        setPosition.CreateRandomPosition();                     //SetPositionスクリプトのCreateRandomPositionメソッドを使用

        destination = setPosition.GetDestination();             //SetPositionスクリプトのGetDestinationメソッドを使用して、destinationに値を代入

        velocity = Vector3.zero;                                //速度を0にする

        elapsedTime = 0f;                                       //経過時間を0にする
    }
Ejemplo n.º 5
0
 public void SetState(EnemyState tempState, Transform targetobj = null)
 {
     if (tempState == EnemyState.Walk)
     {
         arrived = false;
         animator.SetBool("RunBool", true);
         elapsedTime = 0f;
         state       = tempState;
         destination = setPosition.GetDestination();
     }
     else if (tempState == EnemyState.Chase)
     {
         photonView.RPC("RandDamageChange", RpcTarget.All);
         state   = tempState;
         arrived = false;
         //追いかける対象セット
         playerTransform = targetobj;
     }
     else if (tempState == EnemyState.Wait)
     {
         elapsedTime = 0f;
         state       = tempState;
         arrived     = true;
         velocity    = Vector3.zero;
         animator.SetBool("RunBool", false);
     }
     else if (tempState == EnemyState.Atack)
     {
         randomDamage = 0;
         state        = tempState;
         velocity     = Vector3.zero;
         animator.SetBool("RunBool", false);
         animator.SetBool("AtkBool", true);
     }
     else if (tempState == EnemyState.Freeze)
     {
         damaging    = false;
         elapsedTime = 0f;
         state       = tempState;
         velocity    = Vector3.zero;
         animator.SetBool("RunBool", false);
         animator.SetBool("AtkBool", false);
     }
     else if (tempState == EnemyState.Shouto)
     {
         state = tempState;
         animator.SetBool("RunBool", false);
         animator.SetBool("AtkBool", false);
         animator.SetTrigger("ShoutTrigger");
         StartCoroutine(MonsterSE());
         particle.Play();
         randomDamage = 0;
     }
     else if (tempState == EnemyState.Dead)
     {
         state = tempState;
         enemyCollisionSet();
         soundManager.PlayBGM("CreaBGM");
         animator.SetBool("RunBool", false);
         animator.SetBool("AtkBool", false);
         animator.SetTrigger("DeadTrigger");
         soundManager.PlaySE("MonsterDieSE", false, 0.5f);
         StartCoroutine(EnemyDead());
     }
 }
Ejemplo n.º 6
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.º 7
0
    // Update is called once per frame
    void Update()
    {
        if (arrived == false)                                                                      //到着してなかったら
        {
            if (enemyController.isGrounded)                                                        //もしコントローラーが地面に接してたら
            {
                velocity = Vector3.zero;                                                           //速度を0にする

                animator.SetFloat("Speed", 2.0f);                                                  //アニメーターのSetFloatメソッドを使用し、アニメーションのSpeedを2で動かす

                direction = (destination - transform.position).normalized;                         //目的地から今いる場所を引いて、進む方向を決める

                transform.LookAt(new Vector3(destination.x, transform.position.y, destination.z)); //目的地の方向を向く

                //Debug.Log(new Vector3(destination.x, transform.position.y, destination.z));

                velocity = direction * walkSpeed;//速度を定める

                //Debug.Log(destination);
            }

            velocity.y += Physics.gravity.y * Time.deltaTime;                                                                 //時間経過に応じてy軸を調整
            enemyController.Move(velocity * Time.deltaTime);                                                                  //Moveメソッドを使用して時間経過に応じて移動

            if (Vector3.Distance(transform.position, new Vector3(destination.x, transform.position.y, destination.z)) < 0.5f) //目的地までの距離が0.5未満になったら
            {
                arrived = true;                                                                                               //到着した判定にする

                animator.SetFloat("Speed", 0.0f);                                                                             //アニメーションのSpeedを0にする
            }
        }
        elapsedTime += Time.deltaTime;    //経過時間をはかる


        if (searched == false)
        {
            if (elapsedTime > waitTime)                     //経過時間が待ち時間を超えたら
            {
                setPosition.CreateRandomPosition();         //ランダムに位置を選出

                destination = setPosition.GetDestination(); //目的と定める

                arrived = false;                            //到着していない判定に戻して

                elapsedTime = 0f;                           //経過時間を0にする
            }
        }

        if (sensor.player != null)                              //player変数に何か入ってたら
        {
            transform.LookAt(sensor.player.transform.position); //そっちを向く

            //Debug.Log(player.transform.position);

            enemy.transform.Rotate(5, -2, 0); //傾ける 銃弾を真正面に飛ばすようにするためにしたけど修正がいる

            timer += Time.deltaTime;          //銃弾の生成時間の間隔をあけるため

            Shot();                           //撃つ
        }

        if (sensor.enterPlayer == true)
        {
            velocity = Vector3.zero;

            animator.SetFloat("Speed", 0.0f);

            arrived = true;

            searched = true;
        }
    }
Ejemplo n.º 8
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);                        //指定速度で移動
    }