public override void updating() { base.updating(); switch (stat) { //フォロー case cpuStat.chasing: agent.SetDestination(targetpos); distanceCheck(); break; //攻撃 case cpuStat.attack: atkBeahviour(); break; //ゴールラインへ走る case cpuStat.runUp: agent.SetDestination(doorPos); break; } anim.SetFloat(StaticStrings.move, agent.velocity.magnitude); if (target == null) { if (stat != cpuStat.runUp) { stat = cpuStat.runUp; } } }
/// <summary> /// attack selected target /// </summary> public void atkBeahviour() { if (target == null) { return; } targetpos = new Vector3(target.position.x, transform.position.y, target.position.z); float distance = Vector3.Distance(transform.position, targetpos); if (distance > atkRange) { stat = cpuStat.chasing; } if (agent.destination != transform.position) { agent.SetDestination(transform.position); } //rotation transform.LookAt(target, Vector3.up); transform.rotation = Quaternion.Euler(0, transform.eulerAngles.y, 0); atkCounter -= Time.deltaTime; if (atkCounter <= 0) { atkCounter = atkDelay; anim.SetTrigger(StaticStrings.shooting); } }
//距離の確認 void distanceCheck() { if (target == null) { return; } targetpos = new Vector3(target.position.x, transform.position.y, target.position.z); float distance = Vector3.Distance(transform.position, targetpos); if (distance <= atkRange) { stat = cpuStat.attack; } Debug.DrawLine(this.transform.position, target.transform.position + new Vector3(0, 3, 0), Color.red); }
//段階を変更する public void changeStatus(cpuStat s) { agent.ResetPath(); stat = s; }
//最初の場に戻る public override void reset() { base.reset(); findTarget(); stat = cpuStat.chasing; }