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); }
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>(); }
// 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); }
// 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にする }
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()); } }
// 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); }
// 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; } }
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); //指定速度で移動 }