public void Start() { float randomAngle = (float)(r.NextDouble() * 360); randomOffset = new Vector3(Mathf.Sin(randomAngle) / 4.0f, 0.18f, Mathf.Cos(randomAngle) / 4.0f); // randomOffset = new Vector3((float)((r.NextDouble() * 0.5f) - 0.25f), (float)((r.NextDouble() * 0.5f) - 0.25f)); Node startNode = WorldGrid.GetClosestNodeFromPosition(transform.position, true); pathToGoal = FindPathToGoalNode(startNode, WorldGrid.GetClosestGoalNode(startNode)); nodeIndex = 0; lerp = Vector3.Lerp(Vector3.zero, pathToGoal[nodeIndex].transform.position + randomOffset - transform.position, 0.05f); }
void Update() { Vector3 nextPosition = transform.position + lerp; Node nextNode = WorldGrid.GetClosestNodeFromPosition(nextPosition); Node prevNode = WorldGrid.GetClosestNodeFromPosition(transform.position); if (nextNode != prevNode) { nextNode.OnEnter(this); if (!nextNode.IsPassable) { Start(); } } if (pathToGoal[nodeIndex] == null || pathToGoal.Count > nodeIndex + 1 && pathToGoal[nodeIndex + 1] == null) { Start(); } Vector3 directionToTarget = (pathToGoal[nodeIndex].transform.position + randomOffset) - transform.position; float dSqrToTarget = directionToTarget.sqrMagnitude; if (dSqrToTarget < 0.25f) { nodeIndex++; if (nodeIndex == pathToGoal.Count) { Win(); } else { lerp = Vector3.Lerp(Vector3.zero, pathToGoal[nodeIndex].transform.position + randomOffset - transform.position, 0.05f); } } transform.position = nextPosition; }
void Update() { Node nextNode = WorldGrid.GetClosestNodeFromPosition(transform.position + (heading * Time.deltaTime)); Node prevNode = WorldGrid.GetClosestNodeFromPosition(transform.position); if (nextNode != prevNode) { nextNode.OnEnter(this); } if (!nextNode.IsPassable) { RandomHeading(); } else { transform.position += heading * Time.deltaTime; } if (nextNode.GetType() == typeof(GoalNode)) { Win(); } }