Надеюсь, я правильно понял ваш код: вы пытаетесь создать цепочку передач снизу вверх, перемещая случайную величину вверх, а затем случайную величину влево / вправо. Если это правильно, то, возможно, вы обдумываете это.
Rect boundaries;
void Start()
{
boundaries = new Rect(
transform.position, //corner 1
maxWidthPoint.position - transform.position //size: corner 2 - corner 1
);
}
void Update()
{
if (transform.position.y < generationPoint.position.y)
{
float deltaY = Random.Range(distanceBetweenMin, distanceBetweenMax);
float deltaX = Random.Range(minWidthChange, maxWidthChange);
transform.position += new Vector3(deltaX, deltaY, 0);
if(transform.position.y < boundaries.yMin)
transform.position.y = boundaries.yMin
if(transform.position.y > boundaries.yMax)
transform.position.y = boundaries.yMax
if(transform.position.x < boundaries.xMin)
transform.position.x = boundaries.xMin
if(transform.position.x > boundaries.xMax)
transform.position.x = boundaries.xMax
int index = Random.Range(0, theGears.Length);
Instantiate(theGears[index], transform.position, transform.rotation);
}
}