private void SetState(State state) { if (_state != state) { _state = state; switch (state) { case State.Idle: walkAndJump.SetWalkSpeed(0.8f); break; case State.Chase: walkAndJump.SetWalkSpeed(runSpeed); isWandering = false; //Debug.Log("false"); break; } animator.SetInteger("State", (int)state); } }
void Update() { if (!org.alive) { return; } TargetUpdate(); Move(); //ctrl.isTrigger = true; isInRange = false; if (_state == State.Idle) { walkAndJump.SetWalkSpeed(0.8f); if (isWandering == false) { StartCoroutine(Patrolling()); } } if (targetlist.Count > 0) { //RaycastHit[] hits = Physics.RaycastAll(_tr.position, _tr.forward, 2f).OrderBy(h=>h.distance).ToArray(); var hits = Physics.OverlapSphere(_tr.position, 2.5f); foreach (var hit in hits) { if ((hit.gameObject != gameObject) && (hit.gameObject.layer == 9)) { if ((hit.gameObject.tag == "Player") || (hit.gameObject.tag == "Life")) { isInRange = true; mainTarget = hit.gameObject; StopCoroutine(Patrolling()); isWandering = false; _state = State.Run; animator.SetInteger("State", 1); } } } if ((_state == State.Run) && (mainTarget != null)) { var relPos = mainTarget.transform.position - transform.position; walkAndJump.SetWalkSpeed(runSpeed); if (relPos.x < 0f) { movementFlag = 2; } else if (relPos.x > 0f) { movementFlag = 1; } if ((isInRange == false) && ((relPos.x > 3f) || (relPos.x < -3f))) { mainTarget = null; _state = State.Idle; animator.SetInteger("State", 0); } } } else { _state = State.Idle; } }