protected virtual void OnSceneGUI() { SharkBehavior example = (SharkBehavior)target; EditorGUI.BeginChangeCheck(); Vector3 newTargetPosition = Handles.PositionHandle(example.PatrolPoint, Quaternion.identity); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(example, "Change Look At Target Position"); example.PatrolPoint = newTargetPosition; } }
IEnumerator AttackState() { anim.SetTrigger("attack"); _state = SharkBehavior.Attack; while (_state == SharkBehavior.Attack) { if (Time.time >= timeLastSubtracted + .7) { StartCoroutine(FollowState()); StopCoroutine(AttackState()); } yield return(0); } }
IEnumerator FollowState() { _state = SharkBehavior.Follow; while (_state == SharkBehavior.Follow) { transform.LookAt(_player.transform.position); float distance = Vector3.Distance(transform.position, _target.position); if (distance <= attackDistance) { timeLastSubtracted = Time.time; StartCoroutine(AttackState()); StopCoroutine(FollowState()); } if (distance >= 30) { transform.position = _points[0].transform.position; StartCoroutine(PatrolState()); StopCoroutine(FollowState()); } transform.Translate(Vector3.forward * (2 * Time.deltaTime)); yield return(0); } }
IEnumerator PatrolState() { _state = SharkBehavior.Patrol; _currentPoint = 0; StopCoroutine(FollowState()); while (_state == SharkBehavior.Patrol) { transform.LookAt(_points[_currentPoint].transform.position); transform.Translate(Vector3.forward * (3 * Time.deltaTime)); if (Mathf.Abs(_points[_currentPoint].transform.position.x - this.transform.position.x) < 1) { if (_currentPoint == _points.Length - 1) { _currentPoint = 0; } else { _currentPoint += 1; } } yield return(0); } }