이 갤에 자주 들리는데 글은 자주 올라오지 않아서 슬픔 ㅠ

기차 만드는데 앞 뒤 기차끼리 거리 유지를 해주고 싶은데

며칠을 고민해봤지만 어떻게 해야할 지 막막해서 올립니다요

viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38a77a16fb3dab004c86b6fefd5355bb210043210884566e8f3c82281f7ec67740d410db2ef9a7052e72da8df355b5ee4a18cc520 

패스 구성은 이렇게 되어있고 저 오브젝트들 하나씩 찍으면서 다음 오브젝트로 이동함

근데 커브하고 직선에 따라 작동하는게 조금 다름..


지금 스크립트로는 기차마다 스크립트가 붙어서 패스를 따라가는데(따로 노는 상황)

현재 타일과 다음 타일을 생각해서 움직이는 거로 

직선-직선/직선-커브/커브-직선or커브 이렇게 3부분으로 만들었거든여


근데 앞기차와 뒷기차의 거리가 직선에서는 일정해야 됨.


커브-직선or커브 에서는


                progress += Time.deltaTime / duration;

                if (progress > 1f)

                {

                    progress = 1f;

                }

                if (progress < 0.05f) // 직선에서 곡선으로 넘어올 때 보정 해주기

                {

                    distance = Vector3.Distance(bezierCurve.GetPoint(progress + 0.05f), transform.position);

                    transform.position = Vector3.MoveTowards(transform.position, bezierCurve.GetPoint(progress + 0.05f), Time.deltaTime * speed);

                    rotation = Quaternion.LookRotation(bezierCurve.GetPoint(progress + 0.05f) - transform.position);

                    transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * rotationSpeed);

                }

                else if (progress < 1f) // Bezier Curve 돌기

                {

                    Vector3 position = bezierCurve.GetPoint(progress);

                    transform.position = position;

                    transform.LookAt(position + bezierCurve.GetDirection(progress));

                }


                if (progress == 1f)

                {

                    progress = 0f;

                    currentWayPointID++;

                }

이렇게 progress가 주어진 duration으로 deltaTime을 나눠서 움직이고 

직선에서는 코드가 deltaTime*speed로 움직이는

                distance = Vector3.Distance(pathToFollow.path_objs[currentWayPointID].position, transform.position);

                transform.position = Vector3.MoveTowards(transform.position, pathToFollow.path_objs[currentWayPointID].position, Time.deltaTime * speed);


                rotation = Quaternion.LookRotation(pathToFollow.path_objs[currentWayPointID].position - transform.position);

                transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * rotationSpeed);


                if (distance <= reachDistance)

                {

                    currentWayPointID++;

                }

                if (currentWayPointID >= pathToFollow.path_objs.Count)

                {

                    currentWayPointID = 0;

                }

이런 식이라서 곡선하고 직선에서의 기차 속도가 달라여...


viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38a77a16fb3dab004c86b6fefd5355bb210043210884566e8f3c82281f7ec67740d410db2ef9a7052b578f47bff254c3308e6466e

이렇게 보면 비슷해보이는데 제가 걍 speed에 맞춰서 duration 넣어준 거임

계속 돌리다보면 직선에서는 기차끼리 거리가 점점 멀어지고 곡선에선 가까워지는데 자기 맘대로임..

기차끼리 거리 유지를 속력으로 하려고 생각해보니 직선, 곡선에서의 속도가 따로라서 어찌 해야할 지 모르겠슴....


요약 : 

직선에서는 기차 거리를 유지하다가 곡선에서는 거리를 좀 더 멀리 해주고

다시 직선에 들어서면 기차 거리를 유지하고 싶은데 방법에 대한 실마리가 필요합니다.... 도움.... ㅠㅠ

Joint도 써봤는데 기차가 아예 안 움직임;;