// 敵キャラクターの状態変更メソッド 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); } }
private void Start() { buttonControler = GameObject.Find("Foods").GetComponent <ButtonControler>(); controller = GetComponent <CharacterController>(); setPosition = GetComponent <SetPosition>(); setPosition.CreateRandomPosition(); elapsedTime = 0f; }
// 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); }
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; }
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; //ゲーム終了 } }
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(); } }
// 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) { 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); } }
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; } } } }
// 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; } }