강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

남경태님의 프로필 이미지
남경태

작성한 질문수

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

Skill (5) - Skill StateMachine

ChargingState에서 질문이 있습니다.

작성

·

11

0

수업에 보여주셨던 ChargingState 코드에 의하면 해당 State 진입 시 Enter 함수에서 스킬의 Owner 가 Player일 경우, SelectTarget을 호출하는데 여기에 OnTargetSearchCompleted 함수를 전달하여 Charge가 성공할 때 까지 반복하여 SelectTarget을 수행하는 것으로 이해하였습니다.

이 때 왜 Update 함수에서 반복적으로 SelectTarget을 수행하는 것이 아닌 Enter에서 SelectTarget에게 SelectTarget을 호출하는 OnTargetSearchCompleted 함수를 전달하여 반복적인 탐색을 하는 방향으로 설계하신 것인지 설계 의도가 궁금합니다!

답변 1

0

Developer G님의 프로필 이미지
Developer G
지식공유자

수강해주셔서 감사합니다.

 

1) 비동기 입력 처리
플레이어의 조준이나 클릭 대기는 즉발적이지 않은 '비동기적인 상황'입니다. 따라서 매 프레임 타겟을 찾았는지 검사하기보다는, 타겟 서처가 선택을 마쳤을 때만 콜백으로 결과를 알려주도록 하는 이벤트 주도 방식이 훨씬 효율적입니다.

 

2) 깔끔한 재시도 구조
OnTargetSearchCompleted 콜백 내부를 보시면, 타겟팅에 성공하지 못했거나 최소 차지 시간을 채우지 못해 스킬 사용에 실패했을 경우 다시 SelectTarget을 호출해 재시도하도록 되어 있습니다. 만약 이를 Update에서 구현했다면 여러 Flag 변수와 조건문이 뒤섞여 Update문의 코드가 매우 지저분해졌을 것입니다.

 

결론적으로 복잡한 상태 분기를 피하면서 함수들의 책임 분리를 지키기 위한 설계라고 이해해 주시면 되겠습니다

감사합니다.

남경태님의 프로필 이미지
남경태

작성한 질문수

질문하기