분석)
패스)
짧은 패스 - 키보드로 부터 대략적인 방향과 패스키 입력으로 거리를 입력 받아 소유하고 있는 공을 넘겨준다
긴 패스 - 짧은 패스와 마찬가지로 구현(짧은 패스는 땅으로 긴패스는 공중으로) 거리를 입력 받을 때 양의 차이
쓰루 패스 - 패스를 받고자 하는 선수를 파악한 후 받는 선수의 앞쪽(상대방 골문 or 좌우)에 공을 보낸다
* 공을 넘겨 줄때 일정 범위 안으로 공이 갈 수 있게 하는 데 패스 능력치에 따라 범위가 좁아지며 패스의 질을 높일 수 있다
* 선수가 바라보고 있는 방향에서 패스하고자 하는 방향의 차이가 클수록 범위가 늘어난다
* 패스의 범위가 넓어 정확하지 않은 패스를 받고자 하는 움직임 또한 구현
* 휘어서 간다거나 힘있게 빠르게 가는 패스들도 있지만 그건 다음에
드리블)
공을 소유하고 있을 때 움직임을 표현해야 하는데 공이라는 오브젝트를 어떤 방식으로 움직일까를 고민
1) 공을 선수의 장비 아이템처럼 붙힌다
2) 선수의 능력치에 따라 선수 주변의 월드 좌표를 얻고 좌표로 움직이게 한다
1번의 경우 수비/패스(소유권을 넘겨줄 때) 혹은 데드볼 상황 구현시 퀄리티가 떨어질 수도 있을 것 같고
2번의 경우는 지속적인 연산이 필요할 것이며 그에 따라 무거워 질 수도 있겠다는 생각과 선수 2명과 부딪쳤을 때 누구를 기준으로 좌표를 연산할 것인지 많은 경우의 수를 생각해야 할 것 같다
개인기)
커맨드를 이용해 구현을 하지만 공의 움직임 / 상대방의 수비시 몸싸움 / 반칙 등의 상황의 구현은 아직...
슛)
패스와 비슷한 방식으로 구현을 할 수 있겠지만
슛 키를 누르는 동안 게이지를 채우면서 위의 방향을 조절하며 누르는 동안의 방향키로 좌우를 조절해 슛을 할 위치를 찾고 공을 보낸다
기본 적인 방향은 골문의 중심이며 거리 / 선수의 진행 방향과 골문과의 각도에 따라 설정된 위치에서의 공이 날아가 범위가 넓어진다
수비)
태클 / 슬라이딩 태클은 단순히 움직임을 구현하면 된다고 생각하지만 공을 어떤식으로 움직이게 될까?
태클과 상대의 드리블이 동시에 발생했을 때 / 태클 직후 공의 소유권을 가져오자마자 상대의 태클이 들어올 때
등의 상황에서 공은 어떠한 연산으로 좌표를 구해야 할까?
몸싸움은 단순히 선수들끼리 부딪쳤을 때의 경우인데 몸싸움 중에 공이 있다면?
반칙은 어떤 경우에?
등등 아직 생각해야 할 것이 많은 것 같다...
구현 순서)
구현하는데 있어서 한 번에 모두 구현할 수는 없기 때문에 어느 것을 먼저 구현할지 고민하였고
축구는 기본적으로 구기 종목이기에 공을 다루는 드리블 -> 패스(슛) -> 수비 -> AI(골키퍼 포함) -> 개인기 -> 규칙(오프사이드, 페널티 등) 순서로 구현
1 - 드리블)
기본적인 플레이어의 움직임까지 구현해야 하기에 방향키로 방향입력 및 걷기, 달리기, 천천히 걷기, 바라보는 방향 유지 후 걷기, 멈추기 우선 이 5가지를 구현하고 추후에 개인기를 추가하는 방식으로 구현
구현했던 움직임에 대해서 상호작용을 하는 공을 구현해야 하는데
실제 축구를 보았을 때 공을 밀거나 굴리는 방식으로 드리블을 하는 것 같고
미는 방식의 드리블은 분석했던 2가지 말고 단순하게 힘을 주는 Impulse을 이용하고
굴리는 방식은 Torque을 이용해 공의 회전력을 주어 굴리도록 하는 것이지만
2가지를 적절히 섞어 미는 방식의 드리블도 공을 힘으로 밀었을 때 공이 밀린 후 정회전으로 굴러가는 것으로 구현하고
굴리는 방식은 바라보는 방향을 유지하며 드리블할 때와 천천히 걷기를 진행할 때 발에 공이 붙어있는 것 처럼 구현하기 위해 미는 힘 없이 정방향/역방향 회전을 주는 방식으로 구현
개인기의 경우는 상대 수비의 혼란을 주기위한 드리블이기에 수비 AI를 구현이후에 AI가 영향을 받도록 해야하기에
기본적인 드리블만을 구현
2) 패스(슛)