작성
·
52
0
교수님 안녕하세요.
복습하려고 필요한 부분들만 보고 있습니다.
궁금한게 있어서요. (질문해도되나요? )
가스용 입력함수가 따로 있다고 들었는데,
AbilityLocalInputPressed() 함수는 사용하는데 어떤 장단점이 있는지 아시나요?
아레나 플젝에서는 입력바인딩은 네이티브함수로 다 되있어서요.
태그는 매틱마다 반드시 검사할수밖에 없을까요?
태그로 상태,조건을 하는데 너무 많이 쓰면 오버헤드가 생긴대서요. 아니면, 태그 사용을 어느정도까지 사용이 안전한지 디버깅이 될까요?
답변 2
1
GAS를 제대로 쓰기 위해서는 뭐가 어떻게 뭐가 좋다고 하니 사용하기보다, 결국에는 소스코드를 파악하면서 자신의 것으로 만들어야 한다고 생각합니다.
해당 함수의 장점이란 다른 함수도 마찬가지지만 결국 GAS 세팅에 맞게 여러 고려사항이 들어가있다가 되지 않을까 싶습니다.
단점은 어짜피 소스를 보면서 어떻게 동작해야 하는지 이해해야 올바로 가져다 쓸 수 있고 문제가 발생할 때 대응할 수 있기에 어짜피 소스를 자세히 볼 수 밖에는 없다가 되겠지요. 버전업이 되면 어떤 함수는 구현 내용이 막 바뀌기도 합니다.
void UAbilitySystemComponent::AbilityLocalInputPressed(int32 InputID)
{
// Consume the input if this InputID is overloaded with GenericConfirm/Cancel and the GenericConfim/Cancel callback is bound
if (IsGenericConfirmInputBound(InputID))
{
LocalInputConfirm();
return;
}
if (IsGenericCancelInputBound(InputID))
{
LocalInputCancel();
return;
}
// ---------------------------------------------------------
ABILITYLIST_SCOPE_LOCK();
for (FGameplayAbilitySpec& Spec : ActivatableAbilities.Items)
{
if (Spec.InputID == InputID)
{
if (Spec.Ability)
{
Spec.InputPressed = true;
if (Spec.IsActive())
{
if (Spec.Ability->bReplicateInputDirectly && IsOwnerActorAuthoritative() == false)
{
ServerSetInputPressed(Spec.Handle);
}
AbilitySpecInputPressed(Spec);
// Invoke the InputPressed event. This is not replicated here. If someone is listening, they may replicate the InputPressed event to the server.
InvokeReplicatedEvent(EAbilityGenericReplicatedEvent::InputPressed, Spec.Handle, Spec.ActivationInfo.GetActivationPredictionKey());
}
else
{
// Ability is not active, so try to activate it
TryActivateAbility(Spec.Handle);
}
}
}
}
}
태그를 매틱마다 검사하는 로직이 싫다면, 적당하게 커스텀 타이머를 돌려서 체크를 하면 되겠지요.
0
안녕하세요, 인프런 AI 인턴입니다. eunjeong seo님.
게임플레이 어빌리티 시스템(GAS)와 관련하여 입력 함수 및 태그 사용에 대한 질문을 주셨군요. 각 질문에 대해 간단히 설명드리겠습니다.
AbilityLocalInputPressed()
함수는 GAS 시스템 내에서 어빌리티의 입력 처리를 위해 사용되는 함수입니다. 이를 활용하면 GAS에 의해 관리되는 능력(Ability)에 대해 사용자 입력을 보다 세밀하게 처리할 수 있습니다. 다음은 이 함수의 장점과 단점입니다:
장점:
- 입력 처리의 일관성: GAS 시스템 내의 모든 입력은 동일한 방식으로 처리되어 일관성을 유지할 수 있습니다.
- 서버-클라이언트 구조: 네트워크 환경에서 입력 처리가 더욱 확실하게 동기화됩니다. 클라이언트 입력을 서버로 전달하여 처리하는 구조가 효율적입니다.
단점:
- 복잡성 증가: GAS 시스템에 적응하기 위해 추가적인 학습이 필요합니다.
- SAT(사전 정의된 태그)로 기능 분리를 강제하여 시스템을 이해하는 데 시간이 소요될 수 있습니다.
GAS에서 태그는 주로 상태 및 조건 관리를 위해 사용되며, 매틱(Metric)마다 태그를 검사하는 것은 시스템에 따라 일부 오버헤드를 발생시킬 수 있습니다. 각 태그는 FName
으로 구현되어 있어 빠른 해시 비교를 가능하게 하지만, 수백 개 이상의 태그를 매틱마다 검사한다면 성능에 영향을 미칠 수 있습니다.
디버깅 및 성능 관리 팁:
- 태그의 수와 사용 빈도를 확인하여 최적화를 시도하세요. 필수적인 상태 및 조건에서만 태그를 사용하세요.
- 성능에 중대한 영향을 미친다고 판단되는 시점이라면, UE의 “프로파일링”(Profiling) 도구를 사용하여 오버헤드를 측정하고 최적화를 시도하세요.
아직 특정한 표준은 없지만, 테스트를 통해 프로젝트의 요구사항에 맞는 최적화 방안을 찾아야 합니다.
위의 내용에서 다룬 주제들이 언리얼 엔진의 복잡한 시스템을 이해하는 데 도움이 되길 바랍니다. 그리고 추가적으로 관련 내용은 아래의 기존 질문을 통해 확인할 수도 있습니다:
제가 eunjeong seo님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.