24b0d121e09c28a8699fe8b115ef046ecc4ccaf422


 날아다니는 물체를 맞추는 건 많이 요원한 일임.

이건 군대에서 방공병과를 나왔으면 어느 정도 몸으로 느낄거야. 난 아니지만.


목표가 어디 있는지, 거리는 얼마인지, 목표의 이동 속도와 방향은 어떤지, 내가 쏘는 포탄의 탄속은 얼마인지 등등등...


근데 어차피 컴퓨터가 다 해주는 거 아님? <== 맞음.



그래서 대공 사격 조준 로직을 만들었음.



05b4c468e2db3e8650bbd58b368372649c522258


이렇게 깔쌈하게 맞출 수 있지.



24b0d121e09c28a8699fe8b115ef0468e4ace9ba


포탄 하나하나에 리지드바디를 달아놓고, 목표 방향에 AddForce해서 발사함.

아무리 그래도 항력까지 계산하는 건 좀 아닌 것 같아서, 항력은 무시하기로 했음.


아이디어는 다음과 같음.


목표의 위치, 속도를 구한 후, 내가 쏠 탄이 목표까지 이동하는 동안 목표가 추가로 이동할 장소에 포탄을 발사하면 된다!



24b0d121e09c28a8699fe8b115ef046c68f22e4c

대충 이런 느낌. 

목표와의 거리를 산출한 후 해당 거리까지 포탄이 도달하려면 t초가 필요하다고 가정했을 때 목표가 t초동안 이동한 후의 위치에 대고 쏘면 포탄이 맞는다는 논리.


근데 여기엔 한가지 문제점이 있음.



24b0d121e09c28a8699fe8b115ef046f5d4a9b9e

바로 이렇게. 목표가 이동하는 방향에 따라서 포탄이 이동해야 할 거리는 필연적으로 달라지는데, 이러면 계산이 안 맞는다는거임..

그렇다고 방정식을 세워서 요래조래 하기엔 난 수학은 1도 모르기 때문에 다른 방법을 찾아야 했음.


그래서 사용한 방법은 바로 루프를 돌리는거야.



24b0d121e09c28a8699fe8b115ef046eca49c9f0

계산이 한 번 더 들어갈때마다 반드시 오차가 적어지는 게 확인이 됐음.

경험상 8번의 루프를 돌리면 일반적인 포탄의 유효 사거리 내에서는 매우 정확한 조준을 해 주더라.

진짜 완전히 정밀하지는 않지만, 어차피 물리 실험 할 것도 아니니까 여기서 만족했음.


포탄이 비행하는 동안 가해지는 중력 가속도에 의한 궤적 변화도 같은 방식으로 처리했어.



24b0d121e09c28a8699fe8b115ef046a7a6ae9cd

그 결과물이 이 코드인데... 혹시 몰라서 반복 횟수를 프레임당 25536회까지 늘려봤는데 눈에 띄는 성능 저하는 없었음. 역시 컴퓨터라 그런가 수학 계산은 잘 하더라


여기서 파생된 장점이, 반복 횟수를 고의로 낮춰서 일부러 오조준을 할 수 있게 됐다는거야. 적 대공포가 너무 정확하게 쏘는 건 아무래도 게임적으로는 좀 그렇잖아.




반복 횟수 4짜리 대공포. 근거리에서 쏘는지라 직선 비행하는 항공기 상대로는 꽤 정확하게 날려.


작정하고 조준하려면 목표물의 가속도까지 고려해서 조준을 할 수도 있지만, 그건 진짜 뇌절인 것 같아. 차라리 유도 미사일을 쐈으면 쐈지.


긴 글 봐줘서 고마워!