Exemplo n.º 1
0
 // 敵キャラクターの状態変更メソッド
 public void SetState(EnemyState tempState, Transform targetObj = null)
 {
     if (tempState == EnemyState.Walk)
     {
         arrived     = false;
         elapsedTime = 0f;
         state       = tempState;
         setPosition.CreateRandomPosition();
     }
     else if (tempState == EnemyState.Chase)
     {
         state = tempState;
         // 待機状態から追いかける場合もあるのでOff
         arrived = false;
         // 追いかける対象をセット
         playerTransform = targetObj;
     }
     else if (tempState == EnemyState.Wait)
     {
         elapsedTime = 0f;
         state       = tempState;
         arrived     = true;
         velocity    = Vector3.zero;
         animator.SetFloat("Speed", 0f);
     }
 }
Exemplo n.º 2
0
 private void Start()
 {
     buttonControler = GameObject.Find("Foods").GetComponent <ButtonControler>();
     controller      = GetComponent <CharacterController>();
     setPosition     = GetComponent <SetPosition>();
     setPosition.CreateRandomPosition();
     elapsedTime = 0f;
 }
Exemplo n.º 3
0
 // Start is called before the first frame update
 void Start()
 {
     enemyController = GetComponent <CharacterController>();
     animator        = GetComponent <Animator>();
     setPosition     = GetComponent <SetPosition>();
     setPosition.CreateRandomPosition();
     velocity    = Vector3.zero;
     arrived     = false;
     elapsedTime = 0f;
     SetState(EnemyState.Walk);
 }
Exemplo n.º 4
0
    public static bool End;                             //ゲーム終了判定


    void Start()
    {
        enemyController = GetComponent <CharacterController>();      ///コンポネートを取得
        animator        = GetComponent <Animator>();
        setPosition     = GetComponent <SetPosition>();
        setPosition.CreateRandomPosition();
        velocity    = Vector3.zero;                                 //ベクトルを初期化
        arrival     = false;                                        //目的地へ向かう
        elapsedTime = 0f;
        SetState(EnemyState.Walk);
        audioSource = GetComponent <AudioSource> ();
        End         = false;
    }
Exemplo n.º 5
0
 public void SetState(EnemyState tempState, Transform target = null)         //敵の状態変更メソッド
 {
     state = tempState;
     if (tempState == EnemyState.Walk)                                       //見回り状態
     {
         arrival     = false;
         elapsedTime = 0f;
         setPosition.CreateRandomPosition();
     }
     else if (tempState == EnemyState.Chase)                                 //プレイヤーを追いかける状態
     {
         arrival         = false;                                            //待機状態から追いかける場合もあるのでOff
         playerTransform = target;                                           //追いかける対象にプレイヤーをセット
     }
     else if (tempState == EnemyState.Wait)                                  //止まっている状態
     {
         elapsedTime = 0f;
         arrival     = true;
         velocity    = Vector3.zero;
         animator.SetFloat("Speed", 0f);
     }
     else if (tempState == EnemyState.Attack)                                        //攻撃時の設定
     {
         velocity = Vector3.zero;
         animator.SetFloat("Speed", 0f);
         animator.SetBool("Attack", true);
         audioSource.PlayOneShot(attackSound);
     }
     else if (tempState == EnemyState.Freeze)                                //攻撃後のフリーズ時の設定
     {
         elapsedTime = 0f;
         velocity    = Vector3.zero;
         animator.SetFloat("Speed", 0f);
         animator.SetBool("Attack", false);
     }
     else if (tempState == EnemyState.Damage)                                //ダメージを受けた時の設定
     {
         velocity = Vector3.zero;
         animator.ResetTrigger("Attack");
         animator.SetTrigger("Damage");
     }
     else if (tempState == EnemyState.Dead)                                      //死んだ時の設定
     {
         animator.SetTrigger("Dead");
         Destroy(this.gameObject, 3f);
         velocity = Vector3.zero;
         End      = true;                                                    //ゲーム終了
     }
 }
Exemplo n.º 6
0
 public void SetState(string mode, Transform obj = null)     // 敵キャラクターの状態変更メソッド
 {
     if (mode == "walk")
     {
         arrived     = false;
         elapsedTime = 0f;
         state       = EnemyState.Walk;
         setPosition.CreateRandomPosition();
         attacksound.Pause();
         zombiescream.Pause();
     }
     else if (mode == "chase")
     {
         state           = EnemyState.Chase;
         arrived         = false;     // 待機状態から追いかける場合もあるのでOff
         playerTransform = obj;       // 追いかける対象をセット
         attacksound.Pause();
         zombiescream.Pause();
     }
     else if (mode == "wait")
     {
         elapsedTime = 0f;
         state       = EnemyState.Wait;
         arrived     = true;
         velocity    = Vector3.zero;
         animator.SetFloat("Speed", 0f);
         attacksound.Pause();
         zombiescream.Pause();
     }
     else if (mode == "attack")
     {
         state    = EnemyState.Attack;
         velocity = Vector3.zero;
         animator.SetFloat("Speed", 0f);
         animator.SetBool("Attack", true);
         attacksound.Play();
         zombiescream.Play();
     }
     else if (mode == "freeze")
     {
         elapsedTime = 0f;
         velocity    = Vector3.zero;
         state       = EnemyState.Freeze;
         animator.SetFloat("Speed", 0f);
         animator.SetBool("Attack", false);
         attacksound.Pause();
         zombiescream.Pause();
     }
 }
Exemplo n.º 7
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にする
    }
Exemplo n.º 8
0
 // 敵キャラクターの状態変更メソッド
 public void SetState(EnemyState tempState, Transform targetObj = null)
 {
     state = tempState;
     if (tempState == EnemyState.Walk)
     {
         arrived     = false;
         elapsedTime = 0f;
         setPosition.CreateRandomPosition();
     }
     else if (tempState == EnemyState.Chase)
     {
         // 待機状態から追いかける場合もあるのでOff
         arrived = false;
         // 追いかける対象をセット
         playerTransform = targetObj;
     }
     else if (tempState == EnemyState.Wait)
     {
         elapsedTime = 0f;
         arrived     = true;
         velocity    = Vector3.zero;
         animator.SetFloat("Speed", 0f);
     }
     else if (tempState == EnemyState.Attack)
     {
         velocity = Vector3.zero;
         animator.SetFloat("Speed", 0f);
         animator.SetBool("Attack", true);
     }
     else if (tempState == EnemyState.Freeze)
     {
         elapsedTime = 0f;
         velocity    = Vector3.zero;
         animator.SetFloat("Speed", 0f);
         animator.SetBool("Attack", false);
     }
     else if (tempState == EnemyState.Dead)
     {
         elapsedTime = 0f;
         velocity    = Vector3.zero;
         animator.SetFloat("Speed", 0f);
         animator.SetBool("Dead", true);
         Destroy(this.gameObject);
     }
 }
Exemplo n.º 9
0
    private void Update()
    {
        //目的地に到着していない場合
        if (Vector3.Distance(transform.position, destination) > 0.5f)
        {
            direction = (destination - transform.position).normalized;

            //通常移動
            if (impact == false)
            {
                controller.Move(direction * speed);
                transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.FromToRotation(Vector3.up, direction), 0.01f);
            }
            //加速移動
            else if (impact == true)
            {
                direction = (destination - transform.position).normalized;

                controller.Move(direction * impactSpeed);
                if (impactSpeed >= 0.03)
                {
                    impactSpeed -= 0.001f;
                    Debug.Log(impactSpeed);
                }
                transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.FromToRotation(Vector3.up, direction), 0.1f);
            }
            //タッチ箇所への移動
            if (Input.GetMouseButtonDown(0))
            {
                Ray();
            }
        }

        //目的地に着いた場合
        else
        {
            impact       = false;
            impactSpeed  = 0.15f;
            elapsedTime += Time.deltaTime;
            if (elapsedTime >= waitTime)
            {
                setPosition.CreateRandomPosition();
                destination = setPosition.GetDestenation();
                elapsedTime = 0f;
            }

            if (Input.GetMouseButtonDown(0))
            {
                Ray();
            }
        }

        //エサがあるとき、エサを追いかける
        if (foodnullor)
        {
            foods = GameObject.FindGameObjectsWithTag("Food");
            if (foods.Length != 0)
            {
                destination = foods[0].transform.position;
            }
            else if (foods.Length == 0)
            {
                foodnullor = false;
            }
        }

        //タッチ処理
        void Ray()
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            int        layerMask = (1 << LayerMask.NameToLayer("HitPlane"));

            if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
            {
                Vector3 pos = new Vector3(hit.point.x, hit.point.y, transform.position.z);
                if (impact == true)
                {
                    impactSpeed = 0.15f;
                    impact      = false;
                }
                if (buttonControler.foodButton)
                {
                    //エサの生成
                    Instantiate(food, pos, Quaternion.identity);
                    foodnullor = true;
                }
                else
                {
                    //波紋エフェクトの生成
                    Instantiate(touchEffectPrefab, pos, Quaternion.identity);
                    destination = pos;
                }
            }
        }
    }
Exemplo n.º 10
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;
        }
    }