유니티로 톱니바퀴를 이용한 게임을 만들려고 하는데,
어떤 형식이냐면 랜덤한 톱니바퀴가 계속해서 이어서 생성되는 식입니다.
이전 톱니바퀴를 A라고 했을 때
새로 생기는 톱니바퀴의 회전속도는 (A의 톱니수 * A의 돌아가는 속도) / 자기 톱니수 로 해서 맞추었고요,
새로 생겼을 때 이전에 돌아가던 A와의 각도를 맞추기 위해서 똑같은 방식으로 (A의 톱니수 * A의 각도 / 자기 톱니수) 로 했더니
y좌표 일치시키고 x좌표쪽으로 쭈루룩 나열할때는 이상없이 작동합니다.
(움짤임) 이런식으로 잘 작동합니다
문제는 이다음인데 이제 일직선상으로 나열하지 않고 각도를 랜덤으로 줘서 (-45~45도) 그 각도쪽으로 거리를 맞춰서 톱니바퀴를 생성하니까
이 랜덤각도 때문에 톱니바퀴가 다시 안 맞물립니다.
이런식으로요
아까 사용했던 공식에 뭘 더해주든가 곱해주든가 하면 될것같긴 한데(아닐수도있음)
어떻게 하면 될지 도저히 문돌이 대가리로는 힘드네요
도움 부탁드립니다..
이거는 사용한 코드에용
수학갤러리 => 프로그래밍갤러리 거쳐서 여기까지 왔어요...도와주십시오 ㅜㅜ
맞물린 기어와 수평으로 놓여있지 않은 경우 둘 중 하나를 x축 기준으로 두 기어의 벡터값만큼 시계 반대방향으로 회전시켜주면 되지 않을까?
제가 잘 이해를 못해서요.. 일단 제가 -45~ 45도까지 준 랜덤각도를 A라고 했을때 새로 생성되는 톱니바퀴를 (지금공식 + -A) 만큼 회전시켜봤는데 그건 안되더라구요.
0도를 톱니가 들어간 부분으로 규칙을 짜놓고, 새 톱니를 생성할때 이전톱니를 lookAt하게 만들면 서로 들어간 톱니부분이 바라보게 되는데, 이때 자신의 톱니 하나의 각도만큼 살짝 틀어서 생성해주면 될듯하네
lookAt을 Z좌표만 회전하게 만들 방법이 있을까요?
Vector3 targetPosition= new Vector3 (other.transform.position.x, other.transform.position.y, transform.position.z); transform.LookAt (targetPosition);
해결했음 ~!~! 감사합니다.
피타고라스의 정리로 최댓값을 루트2, 최솟값을 1로 두어 각도에 맞춰서 곱해
잘 이해가 안되는데 자세히 알려주실수 있나요...ㅜㅜ
예시로 A가 벡터 제로고 B를 2,2 로 두었을 때 꼭짓점이 0,0 0,2 2,2 로 된 삼각형이 만들어질꺼야
넹 그렇죠
이 꼭짓점을 순서대로 i,j,k 이름을 두고
각도 jik 는 45° 이니 2 * 루트 cos 45 인가? 그러면 1.414 가 나오지, 이걸 회전속도에 대입하면 될 것 같다
어렵지만 한번 해볼게요.. 감사합니다!
니가 한 공식은 거리 비율 없이 그냥 톱니바퀴 갯수나 크기에 대입된거라 처음부터 다시 고뇌하는 거 추천한다
야호 해결했다 고마워요
잘했다 게이야
방금 생각한거라 틀릴수 있음. 일단 톱니 A에서 톱니 B로 가는 방향에서 톱니 B의 톱과 톱니 A의 홈이 만난다고 가정함. 기준상태라고 말하겠음. 이 때 톱니 A의 각도는 a1이고 톱니 B의 각도는 b1임. a1과 b1은 구할 수 있는 상수임. 톱니 A의 톱니와 다음톱니 사이의 각도는 aa라고 두고 톱니B의 톱니와 다음톱니 사이각은 bb라고 둠. 톱니 A의 실제 각도를 a2라 하면, a2와 a1의 각도차이를 A의 톱니 수로 나눈 값을 c라고 둠. 값 c는 기준 상태에서 현재 상태로 맞추기 위해 A를 회전시킨다고 할 때 몇 톱니만큼 회전해야 하는가에대한 값임. 그 톱니 수만큼 B를 반대로 회전시키기 위해 B를 기준상태에서 c * bb 각도만큼 회전시키면 될 듯
해결했음 !!! 고맙습니다.