1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | void Update() { if (middle) { targetPosition = target.GetChild(0).position; targetRotation = target.GetChild(0).rotation; } else if (last) { targetPosition = target.GetChild(1).position; targetRotation = target.GetChild(1).rotation; } print(lookDirection); transform.localPosition = Vector3.Lerp(transform.position, targetPosition, nSpeed * Time.deltaTime); transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, nSpeed / 4f * Time.deltaTime); } | cs |
칙칙폭폭 기차놀이입니다.. 어제의 도움으로 이어 붙이고 그냥 움직이는데까지는 만들었는데 생각해보니 기차가 코너를 돌 때 회전을 해야겠더라고요.
지금 상태로 하면 회전도 잘 되는데 position이 앞 기차의 끝부분이라 다음 기차의 중간부분이 앞 부분의 끝을 중심으로 이동해서 겹쳐져요.
그래서 기차 사이에 간격을 주려고
targetPosition = target.GetChild(0).position + (Vector3.forward * (renderer.bounds.size.z + zOffset)) / 2;
으로 수정을 해보니까 기차가 간격은 제대로 유지하는데 z축에서 좀만 벗어나도 막 이탈한 것 처럼 / / / 이런 모양으로 회전해영 당근빠따 Vector3.forward를 써서 그렇겠죠
targetPosition = target.GetChild(0).position;
걍 이렇게 하면 회전은 잘 되는데 기차에 간격이 안 생기는데 어떻게하면 좋을까여
간격은 (renderer.bounds.size.z + zOffset)) / 2 이정도를 줄려고 해여
1줄 요약 : 기차 사이에 간격을 주고 회전도 이어져서 회전하게 만들고 싶다
프리팹은 이런 상태임. forward는 차량의 앞부분, back은 차량의 뒷부분에 위치함
이해가 잘 안가요 targetPosition은 누구의 포지션이죠? GetChild(0)은 아마 첫째 같은데 기차는 몇량으로 이루워져있나요?, Vector3.forward는 z축으로 1인가 -1인가 그런거 같은데 vector3.Forward가 아니라 앞칸위치 - 뒷칸위치 방향으로 해야될거같은데 ㄴㄴ?
targetPosition이 앞 차량에 꽁무니를 나타내고 기차는 앞,중간,뒷 기차로 있는데 중간 기차는 몇 개고 붙일 수 있어여
중간 기차에 자식으로 0 : 기차의 앞, 1:기차의 뒤를 나타내는 게임오브젝트를 붙였어여
원래 제 생각으로는 앞 차량의 꽁무니와 뒷 차량의 앞을 이어서 체인처럼 해주려고 했는데 자식으로 부모를 바꿀 순 없는 거 같더라고여
기차 놀이 라고 하니까 그것이 생각난 내 머리가 싫다
해결의 실마리를 찾았다!
그것이 뭐죠
엄청 더러운데 님이 말한 앞칸-뒷칸을 벡터로 얻어서 정규화하고 sizeOffset이라고 새로 변수를 만들어서
sizeOffset = renderer.bounds.size.x, z를 transform.localEulerAngles.y 각도에 따라서 바꿔주면 완성!
완벽하진 않은데 제 수준에서 할 수 있는 최선이었음
ㅋㅋ 이걸 하니까 중간 기차가 1개를 넘어가면 이상해지네 ㅅㅂ