Причина, по которой он перемещает оригинальный шар, заключается в следующей строке:
transform.position = new Vector3(randomX, randomY, transform.position.z);
Устанавливает позицию текущего объекта.
Если вы хотите просто создавать новые объекты в случайных позициях, вы должны сделать это:
void OnTriggerEnter2D (Collider2D collision)
{
if (collision.gameObject.name == "tile" && balls < maxBalls )
{
balls = balls + 1;
randomX = Random.Range(-3, 4);
randomY = Random.Range(-3, 4);
Vector3 newPosition = new Vector3(randomX, randomY, transform.position.z);
Instantiate(ball, newPosition, transform.rotation);
NumberofBalls();
}
}

