void FixedUpdate() { float changedDistanceFromLastPos = Vector3.Distance(target.transform.position, cachedTargetPosition); float distanceToTarget = Vector3.Distance(this.transform.position, target.transform.position); //Debug.Log("Moved: " + changedDistanceFromLastPath); //Debug.Log ("Need to move: " + distanceToTarget*resolution); switch (currentMode) { case MODE.STRAIGHT: if (changedDistanceFromLastPos > distanceToTarget * resolution && !isSearching) { // Find new path cachedTargetPosition = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z); seeker.ReleaseClaimedPath(); seeker.StartPath(this.transform.position, cachedTargetPosition, OnPathComplete); isSearching = true; } break; case MODE.HUNT: movement targetMovement = target.GetComponent <movement>(); if (changedDistanceFromLastPos > distanceToTarget * resolution && !isSearching) { // Find new path standingStill = false; cachedTargetPosition = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z); seeker.ReleaseClaimedPath(); Vector3 huntPos = cachedTargetPosition + targetMovement.getDirection() * targetMovement.getSpeed(); seeker.StartPath(this.transform.position, huntPos, OnPathComplete); isSearching = true; } else if (targetMovement.getSpeed() < 0.1f && !standingStill && !isSearching /*cachedTargetPosition != target.transform.position*/) { standingStill = true; cachedTargetPosition = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z); seeker.ReleaseClaimedPath(); seeker.StartPath(this.transform.position, cachedTargetPosition, OnPathComplete); isSearching = true; } break; case MODE.HIDE: if (path == null) { return; } if (currentWaypoint >= path.vectorPath.Count && !isSearching) { if (isInLOS()) { Vector3 hidingPoint = findHidingPoint(); seeker.ReleaseClaimedPath(); seeker.StartPath(this.transform.position, hidingPoint, OnPathComplete); isSearching = true; } ; } break; default: break; } Move(); }