출처 :
-
※ 오역 및 의역 주의
※ 번역기 사용 (구글, 파파고)
일부 문장은 따로 다시 번역했습니다.
최신 개발자 블로그에 오신 것을 환영합니다!
투사체 반사 스킬의 개발 과정에 대한 몇 가지 정보를 제공하고자 합니다.
먼저, 최종 버전을 살펴보겠습니다!
새로운 기능을 작업할 때는 항상 설계가 우선입니다.
투사체 반사의 설계 의도는 쳐내기를 사용하여 발사된 화살을 잡아 바로 돌려보내는 것이었습니다.
다음 단계는 프로토타입 애니메이션을 만드는 것이었습니다.
애니메이션을 만든 후에는 게임 엔진에 연결하여 프로토타입을 만들었습니다.
저희는 이미 일련의 입력과 조건을 기반으로 애니메이션을 재생하는 시스템을 갖추고 있었습니다.
이 시스템을 사용하여 쳐내기 입력을 듣고 이동을 트리거해야 하는지 여부를 결정하기 위해 "조건에서 조준/사격"이라고 하는 조건을 확인했습니다.
프로토타입에 대한 잡기 측면을 건너뛰기로 결정했기 때문에, 최종 버전은 단순히 플레이어가 락온한 적에게 화살을 다시 쏘는 것이었습니다.
그러고나서 불과 몇 시간 만에 게임에 적용했습니다!
물론, 여러분은 이미 이것이 약간 거칠고 실제 게임에서 일어나지 않을 것이라는 걸 알 수 있습니다.
하지만, 이것은 저희가 어떤 작품을 실현해야 하는지를 결정하는 첫 단계인 개념 증명서였습니다.
일부 예외를 제외하고는 다른 발사체에도 이 작업을 수행하고 싶었습니다. 통이나 시체 같은 대형 발사체는 불가능합니다.
프로토타입이 준비된 상태에서 스킬을 활성화하기 위해 탐지가 어떻게 작동해야 하는지 결정해야 했습니다.
"사격 상태"는 NPC가 사격 중일 때만 측정되기 때문에 화살을 쏘기 전에 스킬을 발동할 수 있었고,
멀리 떨어져 있을 경우 화살이 충분히 가까오기 전에 사격 상태를 종료할 수 있었습니다!
따라서 발사체에 부딪힐지 여부를 확인할 수 있는 보다 안정적인 방법이 필요했습니다.
다행히 현재 공중에 떠 있는 모든 발사체의 목록을 보관하고 있습니다.
이 목록을 스캔하여 "충돌까지 얼마나 걸립니까?" 또는 "당신을 향하고 있습니까?"와 같은 사항을 확인합니다.
이 새로운 조건에서 다음 단계는 발사체를 격추하는 것이었습니다!
프로토 버전에서는 사격이 잘 작동했지만, 락온한 적을 목표로 삼았습니다. 그것은 실제 게임에선 금물이었죠.
운 좋게도 저희는 발사체 데이터 자체에 발사체를 쏘는 사람에 대한 정보를 저장하기 때문에(손상 이유로),
"반격" 부분을 다루기 위해 이 정보를 이용하여 목표를 정확하게 설정할 수 있었습니다.
초기 개발의 마지막 단계 중 하나는 발사체를 잡는 것이었습니다.
그러나 이 단계에서는 게임 내에서 괜찮아 보였기 때문에, 들어오는 화살을 파괴하고 적절한 순간에 새로운 화살을 손에 생성하기로 결정했습니다.
마지막으로, 애니메이션이 저격수를 향하도록 했습니다. 쿵! 저희가 해냈습니다.
이제 발사체를 "잡아" 발신자에게 반환할 수 있습니다!
다음은 다듬기입니다.
플레이어는 발사체가 명중하려고 하거나 너무 멀리 떨어져 있을 때 쳐니기 버튼을 누를 수 있기 때문에 잡기가 너무 늦거나 너무 이르게 됩니다.
저희는 발사체의 정확한 위치에 맞춰 잡기 애니메이션의 시간을 정하는 방법을 찾아야 했습니다.
애니메이션을 타임 스케일링하여 이 작업을 수행했습니다. : 애니메이션 재생을 느리게 또는 빠르게 만듭니다.
애니메이션을 정상 속도에서는 1, 절반 속도에서는 0.5 등으로 재생하기 위해 시간 비율을 계산해야 했습니다.
재생되는 애니메이션을 제어할 수 있는 애니메이션 상태 기계에서 이 작업을 수행했습니다.
분홍색 상자(왼쪽 아래)는 자신과 화살표 사이의 거리입니다. 이 정보는 코드에서 애니메이션 엔진으로 피드백됩니다.
이 모든 작업이 완료되면 카메라를 추가하여 작업을 보여 줍니다.
저희가 모든 유형의 발사체에 대해 이 작업을 수행하고 싶다고 말한 것을 기억하시나요?
지금까지 모든 것이 10점 만점에 1점이었습니다. 다행히도, 대부분의 조각이 동일합니다.
감지 코드는 동일하지만 다른 발사체(예: 화살 대 방패)에 대해 다른 애니메이션을 재생해야 했습니다. 또한, 무기 잡기도 배치해야 했습니다.
일부 기술을 재사용하여 무기 잡는 것을 지원할 수 있지만 발사체 코드에 "무언가에 얽매였다면, 계속 뛰지 마십시오."라는 체크를 추가해야 했습니다.
이는 발사체를 잡았을 때 멈추도록 하기 위한 것입니다.
그런 다음 여러 가지 유형의 발사체를 구별하여 각각에 맞는 애니메이션을 재생하는 방법을 추가했습니다.
다른 무기들치고는 식은 죽 먹기였지만, 저희가 되돌려 놓은 모든 것이 무기는 아니었습니다.
"무기 집기" 기술은 암석이나 폭탄에 효과가 없었습니다.
저희는 물체를 "뼈"에 부착하는 방법을 가지고 있었습니다.
그래서 발사체를 "무기 뼈"에 부착할 수 있었고, 발사체는 뒤에서 달라지더라도 똑같이 보일 것입니다.
설정할 때 약간의 오타로 인해 발사체 자체가 아닌 발사체를 쏜 사람이 부착되었습니다! 앗!
한 번의 웃음과 몇 번의 클릭만으로 모든 문제가 해결되었습니다.
이 시점에서는 최종 타이밍 조정 같은 걸 주로 수정했습니다.
이 기능을 개발하는 동안 몇 가지 흥미로운 버그가 발생했습니다.
예를 들어 내부 케이스에는 "화살이 근처에 있을 때 쳐내기를 누른 후 요가를 시작합니다."라고 쓰여 있습니다. 어허.
버그 보고서를 받을 때 대개 동영상이 포함되므로, 첫 번째 단계는 영상을 시청하는 것입니다.
곧바로, 애니메이션의 시간 확장에 문제가 있다는 것이 분명해졌지만, 원인이 무엇인지 알 수 없었습니다.
근본 원인을 파악하는 데 오랜 시간을 할애할 수도 있고, 그런 일이 발생하지 않도록 안전 장치를 추가할 수도 있습니다.
저희는 후자를 선택했고, 이전 수학에 "발사체는 9m이상 떨어져 있을 수 없습니다."를 추가했습니다.
따라서, 애니메이션의 최대 속도는 약 절반 속도입니다.
애니메이터 중 한 명이 팀에 "잘가!"라는 비디오를 보냈습니다.
재밌긴 하지만, 이것은 저희가 게임에서 원했던 것보다 매우 현실적이지 않았습니다.
저희는 이미 공격을 통해 래그돌의 힘을 제압할 수 있으므로 빠른 수정이 있었습니다. "웃긴"에서 "고상한"으로 줄였습니다.
계속해서 제기된 한 가지 문제는 가끔씩 애니메이션을 재생했지만, 아무것도 발사하지 않았다는 것입니다.
모든 문제를 추적하고 수정하는 데 많은 작업이 필요했지만 한 가지 사례는 언급할 가치가 있었습니다.
유저가 화살을 잡으려고 하는 동안 활을 제거하는 경우입니다. 솔직히, 저희는 그런 생각은 못 했습니다!
활이 있는 경우와 없는 경우, 두 가지를 점검하여 이 문제를 해결했습니다.
이제, 이것은 투사체 반사 자체의 문제가 아닙니다. 기수 NPC는 깃발을 던졌지만, 이건 정말 그들이 가져서는 안 되는 깃발이었습니다.
항상 새롭네요.
다음 두 가지 주요 내용을 읽어주시길 바랍니다.:
• 게임을 만드는 것은 쉬운 일이 아닙니다.: 염두해야 할 수많은 요소들이 있습니다. 그리고 언뜻 보기에 작은 작업도 상당한 시간이 걸릴 수 있습니다.
• 하지만 그것은 또한 재미있는 여정이기도 합니다.:
문제 해결은 때때로 어려울 수 있습니다.
그리고 해결한 문제가 여전히 효과가 없다는 걸 깨달았을 때 생각이 급해질 수도 있습니다.
버그가 이상적이지는 않지만, 버그가 없으면 게임이 개발되지 않습니다.
문제를 해결하는 여정은 재미있을 수 있고, 그 결과는 그만한 가치가 있습니다!
이 개발자 블로그를 읽어 주셔서 감사합니다.
디스코드로 이동하여 토론을 하고 의견을 공유하세요. 앞으로 있을 어쌔신크리드 소식을 보려면 트위터, 인스타그램 및 페이스북을 팔로우해주세요.
스칼!
아주 신박한 기술이었습니다
게임회사 QA 시절 악몽이 떠오르는군