void SetEachObjetPathOnWayPoint() { foreach (Transform movingObject in _movingObjects) { Object_Waypoint_Data wp = movingObject.GetComponent <Object_Waypoint_Data>(); switch (type) { case MovementSpace.Vector_3D: movingObject.position = Vector3.MoveTowards(movingObject.position, _wayPoint[wp.myTarget].position, wp.speed * Time.fixedDeltaTime); if (Vector3.Distance(movingObject.position, _wayPoint[wp.myTarget].position) < .2f) { movingObject.position = _wayPoint[wp.myTarget].position; UpdateWayPoint(wp, movingObject); } break; case MovementSpace.Vector_2D: movingObject.position = Vector2.MoveTowards(movingObject.position, _wayPoint[wp.myTarget].position, wp.speed * Time.fixedDeltaTime); if (Vector2.Distance(movingObject.position, _wayPoint[wp.myTarget].position) < .2f) { movingObject.position = _wayPoint[wp.myTarget].position; UpdateWayPoint(wp, movingObject); } break; } } }
void UpdateWayPoint(Object_Waypoint_Data wp, Transform movingObject) { switch (movementType) { case MovementType.Back_And_Forth: if (wp.reverse) { wp.myTarget--; if (wp.myTarget < 0) { wp.reverse = false; wp.myTarget = 1; } } else if (wp.reverse == false) { wp.myTarget++; if (wp.myTarget > _wayPoint.Count - 1) { wp.reverse = true; wp.myTarget = _wayPoint.Count - 1; } } break; case MovementType.Go_Back_To_Start: wp.myTarget++; if (wp.myTarget > _wayPoint.Count - 1) { movingObject.position = _wayPoint[0].position; wp.myTarget = 1; } break; case MovementType.Loop: wp.myTarget++; if (wp.myTarget > _wayPoint.Count - 1) { wp.myTarget = 0; } break; } }
} // end loop void ReturnToStart(float t_spreadAmount) { // initial direction for alligining objects Vector3 dir = _wayPoint[1].position - _wayPoint[0].position; for (int i = 0; i < _movingObjects.Count; i++) { _movingObjects[i].position = _wayPoint[0].position + (Vector3.Normalize(dir) * (t_spreadAmount * i)); } foreach (Transform _object in _movingObjects) { Object_Waypoint_Data owd = _object.GetComponent <Object_Waypoint_Data>(); owd.myTarget = 1; // increade their target as they have moved from pi int safetyPoint = 0; // while distance of me from my previous target is greater than the target from start point while ((Vector3.Distance(_object.position, _wayPoint[owd.myTarget - 1].position) > Vector3.Distance(_wayPoint[owd.myTarget - 1].position, _wayPoint[owd.myTarget].position)) && safetyPoint < 10) { // store amount of distance off object is from current target float offsetDistance = Vector3.Distance(_object.position, _wayPoint[owd.myTarget].position); // dir = target.pos - start.pos Vector3 direction = _wayPoint[owd.myTarget + 1].position - _wayPoint[owd.myTarget].position; // set new position _object.position = _wayPoint[owd.myTarget].position + (Vector3.Normalize(direction) * offsetDistance); owd.myTarget++; // on the off chance we have an endless while loop safetyPoint++; } } // end foreach loop } // end return to start function
void Loop(float t_spreadAmount) { // initial direction for alligining objects Vector3 dir = _wayPoint[1].position - _wayPoint[0].position; for (int i = 0; i < _movingObjects.Count; i++) { _movingObjects[i].position = _wayPoint[0].position + (Vector3.Normalize(dir) * (t_spreadAmount * i)); } foreach (Transform _object in _movingObjects) { Object_Waypoint_Data owd = _object.GetComponent <Object_Waypoint_Data>(); owd.myTarget = 1; // increade their target as they have moved from pi int safetyPoint = 0; // initialise values float myDistance = Vector3.Distance(_object.position, _wayPoint[owd.myTarget - 1].position); float distanceBetweenPoints = Vector3.Distance(_wayPoint[owd.myTarget - 1].position, _wayPoint[owd.myTarget].position); // while distance of me from my previous target is greater than the target from start point while ((myDistance > distanceBetweenPoints) && safetyPoint < 10) { // store amount of distance off object is from current target float offsetDistance = Vector3.Distance(_object.position, _wayPoint[owd.myTarget].position); if (owd.myTarget < _wayPoint.Count - 1) { Debug.Log(owd.name + " working"); // dir = target.pos - start.pos Vector3 direction = _wayPoint[owd.myTarget + 1].position - _wayPoint[owd.myTarget].position; // set new position _object.position = _wayPoint[owd.myTarget].position + (Vector3.Normalize(direction) * offsetDistance); owd.myTarget++; // update new values myDistance = Vector3.Distance(_object.position, _wayPoint[owd.myTarget - 1].position); distanceBetweenPoints = Vector3.Distance(_wayPoint[owd.myTarget - 1].position, _wayPoint[owd.myTarget].position); } else { Debug.Log(owd.name + " dfdf"); // dir = target.pos - start.pos we go back to start Vector3 direction = _wayPoint[0].position - _wayPoint[owd.myTarget].position; // set new position _object.position = _wayPoint[owd.myTarget].position + (Vector3.Normalize(direction) * offsetDistance); owd.myTarget = 0; myDistance = Vector3.Distance(_object.position, _wayPoint[_wayPoint.Count - 1].position); distanceBetweenPoints = Vector3.Distance(_wayPoint[_wayPoint.Count - 1].position, _wayPoint[owd.myTarget].position); } // on the off chance we have an endless while loop safetyPoint++; } // end while } // end foreach } // end loop