월 33,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
게임플레이 태그 컨테이너, GAS와 기존 액터컴포넌트 차이
안녕하세요. 두 가지 질문이 있습니다.게임플레이 태그도 FName으로 구현되었다면 해시테이블 자료구조로 저장되어 있을 것이라 예측했는데 계층구조를 지원하는 검색기능을 제공한다면 게임플레이태그 컨테이너는 Trie같은 자료구조로 만들어져 있는 건가요?GAS를 사용해서 구현하는 방식이 액터로부터 기능을 분리하는 것인데 기존에 언리얼에서 제공하는 액터컴포넌트와 차이가 있을까요?
- 미해결이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
ConfirmTargetingAndContinue에서 브레이크가 걸립니다. [해결됨]
제목처럼 디버그 모드 실행시여기 check문에 걸리는데요 코드를 비교해 봐도 어디가 문제인지 모르겠습니다..
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
private를 잘 안 쓰시는 이유?
교수님 강의를 듣다 보니 private를 써도 되지 않나 싶은 곳에서도 전부 protected를 쓰시는 것을 보고 궁금증이 생겼습니다 예시로 4강에서 JumpAndWaitForLanding 클래스를 만들 때도 이 클래스는 제 생각에 더 파생되지 않을 것 같은데... 생각이 들었지만 protected를 사용하셨습니다 파생 클래스가 없다면 둘이 큰 차이는 없을 것 같다고 생각하지만 protected를 많이 사용하시는 이유와 스토리가 궁금합니다
- 미해결이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
SetupGASInputComponent 호출 부분 질문입니다.
PossessedBy 함수가 서버에서만 호출되기 때문에 인풋에 관련된 함수를 다시 호출해 주는 것은 이해했는데요, SetupPlayerInputComponent 가 아닌 SetupGASInputComponent를 호출하는 이유가 뭔가요? GAS에 관련된 인풋 함수만 중복 호출 하는 이유가 궁금합니다.
- 미해결이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
언리얼 기본 제공 태스크 UAbilityTask_WaitTargetData
언리얼이 기본제공하는 태스크들이 정말 많아서 좀 둘러보다가 저희가 만든 AT_Trace랑 비슷한 "UAbilityTask_WaitTargetData"라는 게 있어서 좀 살펴봤는데요. Activate()에 있는 구현 내용이 중복되는 BeginSpawningActor()와 FinishSpawningActor() 함수가 있는데 임의로 블루프린트에서 이 태스크를 실행해보니 Activate()가 실행이 안되고 이 두 함수가 실행되는 걸 봤습니다.이런 식으로 그냥 실행해봤는데요.사실 코드에선 어빌리티에서 CreateTarget()을 하고 ReadyForActivation()까지 호출해야 AT의 Activate()가 실행되는데 블루프린트에서는 이 노드 호출만으로 어떻게 AT가 실행까지 되는지도 잘 모르겠습니다. 거기에 UAbilityTask_WaitTargetData 처럼 Activate() 대신에 BeginSpawningActor()/FinishSpawningActor() 가 실행되는 이유도 알고 싶습니다....이 두 함수 존재의 설명은 엔진 주석에 나와있어서 어느정도 파악이 됐는데 문제는 코드에서든 블루프린트에서든 호출되는 조건을 잘 모르겠습니다...
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
어빌리티 태스크의 블루프린트 핀에 Async Task는 용도가 뭔가요?
찾아보려 했는데 정보가 잘 안 나오네요... +아, 그리고 블루프린트에서는 태스크 생성과 동시에 자동으로 ReadyForActivation 까지 호출되는 건가요??? 그러고보니 이 함수가 없네요
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
여러 대상에게 Effect를 전달하는 방법
AttackHit어빌리티의 스킬 공격 판정 결과 함수에서스킬 타겟 액터는 HitResult 대신 Actors 에 충돌된 액터들을 넣어서 보내주기 때문에 TargetDataHandle에 대상 액터들이 들어있을 텐데요. 이를 엔진 내부에서 사용하여한번의 ApplyGameplayEffectSpecToTarget() 호출로 각 대상 액터들에게 모두 Effect를 적용하는 걸로 예상하고 있습니다. 그런데 ASC에서 직접 BP_ApplyGameplayEffectSpecToTarget()을 할 때는 대상 액터가 여러개라면 For문으로 직접 여러번 호출할 수 밖에 없어 보이는데, 혹시 ASC도 Effect를 한번 호출로 여러 타겟에 적용하는 함수가 있나요??
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
SendGameplayEventToActor() 발동 시 ASC 동작
나름대로 제가 알아볼 수 있을 정도만 정리 중인데요. SendGameplayEventToActor()가 어빌리티랑 이벤트 델리게이트를 활성화 할 수 있던데, 만약 이 두 개가 우연히 같은 Tag를 가지고있다면 Send 함수 호출 한번으로 둘이 동시에 실행되는 건가요???
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
AttributeSet 함수 정리
AttributeSet의 각 함수에 대해 의미와 동작 방식, 사용처가 조금 헷갈려서 제가 실험을 좀 해본 후에 정리한 것인데요.여기서 틀린 정보가 있을지 혹시 알 수 있을까요... 그리고 UAbilitySystemComponent:GetGameplayAttributeValueChangeDelegate(FGameplayAttributeAttribute)이 델리게이트 같은 경우는 PostGameplayEffectExecute() 다음에 이벤트 발생 되는 건가요??
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
어빌리티 태스크에서 GetWorld() 얻어올 때 어빌리티에서 가져오는 것
바로 GetWorld() 하는 것과 Ability->GetWorld() 하는 것이 어떤 차이가 있나요?World라는 것이 자신이 생성되어 소속되어있는 레벨의 월드 데이터로만 알고있는데, 월드데이터가 오브젝트마다 다를 수가 있는 건가요?
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
GAS 보조게임 모듈은 GameFeature로 만든건가요?
플러그인에 게임피처가 적용 안되어 있는 걸로 보면 직접 파트1에서 한 것처럼 수동으로 폴더와 파일을 만들어서 제작한 것 같은데요. GAS 빌드.cs 에 PrivateDependencyModuleNames에 "GameFeatures"는 왜 있는 건가요??
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
VS에서 저장 안한 코드가 에디터에서 컴파일 할 때마다 사라지는 문제
에디터를 켠 상태로 vs코드를 수정하다가 저장을 안하고 그대로 에디터에서 새 클래스를 생성한다던지 하는 방식으로 에디터에서 컴파일을 실행하면, 저장안한 코드는 전부 사라지는 것 때문에 강의를 여러번 되돌려보고 디버깅 따로 해보느라 여러번 낭패를 봤는데요. 이거는 그냥 코드 수정할 때마다 저장 제때하는 것밖에 방법이 없는 건가요???뭔가 방지하는 방법은 없나요
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
NotifyActorBeginOverlap 방식 충돌체크
예전에 Trigger의 오버랩 델리게이트에 직접 함수를 바인딩하여 충돌체크를 했던 방식과 사뭇 다른데요. NotifyActorBeginOverlap 은 액터가 가지고있는 모든 충돌 가능 컴포넌트를 모두 자동으로 감시하나요??
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
ApplyGameplayEffectSpectToTarget()을 사용하기 전 조건
이 함수를 이용하려면 TargetDataHandle을 넣도록 되어 있는데요.그래서 Trace 어빌리티 테스크를 통해 전달받은 데이터를 사용한 것 같습니다.그런데 다른 방식으로 타겟을 정하거나 수동으로 ApplyGameplayEffectSpectToTarget()를 사용하려면FGameplayAbilityTargetDataHandle을 억지로 만들어 채워야 하나요??
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
플레이어에만 위젯을 넣었는데 NPC에서 HpBar가 어떻게 나오나요??
강의 따라가다가 제 화면에서는 플레이어에만 HpBar가 나오는데 강의에선 NPC에도 나와서 질문 드렸습니다. +npc에도 같은 위젯코드를 넣어봤더니 에디터를 처음 켤 때 로딩중에 위젯컴포넌트에서 InitWidget()이 실행되면서 위젯의 SetAbilitySystemComponent()를 호출하게 되는데요. 저는 SetAbilitySystemComponent()에 ensure을 놔뒀더니 이 타이밍이 빙의 전이라 어트리뷰트가 등록이 안되있는 상태라서 에러가 발생하는 것같습니다.강의 처럼 if 로직으로 바꾸면 되긴하는데 로딩중에 위젯컴포넌트의 InitWidget()가 호출되는 이유가 무엇인가요? 월드에 npc가 배치되있긴하지만 BeginPlay()를 호출하지는 않는데 왜 InitWidget()이 호출되는지 잘 모르겠습니다.제가 part2에서 들었던거는 액터의 BeginPlay() 이후에 호출된다고만 들었는데 다른 이유가 있나요?? 이것 때문인 것 같습니다.
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
게임플레이 이펙트의 Magnitude Calculation Type을 바꿨을 때 질문입니다.
Magnitude Calculation Type을 Attribute Base로 바꿨을 때도 아래의 코드를 지우지 않았는데, 이거는 그냥 무시되는 건가요?
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
ASC의 컨테이너에 추가한 타겟 액터 질문
이렇게 ASC 에 추가하고나서 OnDestroy() 될 때, 타겟 액터는 지우는데요.ASC의 컨테이너는 이와 관련해서 타겟 액터를 다시 뺀다던가 하는 처리를 안 해도 되는건가요??
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
ASC->SpawnedTargetActors 에 추가된 타겟 액터에 관해서 질문있습니다.
6강의 ABAT_Trace의 FinalizeTargetActor() 함수에서, 이하와 같이 생성완료된 타겟 액터를 오너 캐릭터의 ASC의 SpawnedTargetActors에 추가했는데, Ability Task가 종료될때 SpawnedTargetActors에서 제거하지 않아도 괜찮을까요?void UABAT_Trace::FinalizeTargetActor() { UAbilitySystemComponent* ASC = AbilitySystemComponent.Get(); if (ASC) { const FTransform SpawnTransform = ASC->GetAvatarActor()->GetTransform(); SpawnedTargetActor->FinishSpawning(SpawnTransform); ASC->SpawnedTargetActors.Push(SpawnedTargetActor); SpawnedTargetActor->StartTargeting(Ability); SpawnedTargetActor->ConfirmTargeting(); } } 혹시나 삭제해야 한다면 타겟 액터 콜백 함수에서 EndTask() 의 실행 직전에 삭제하면 되는지 궁금합니다.void UABAT_Trace::OnTargetDataReadyCallback(const FGameplayAbilityTargetDataHandle& DataHandle) { if (ShouldBroadcastAbilityTaskDelegates()) { OnComplete.Broadcast(DataHandle); } // 추가한 부분 UAbilitySystemComponent* ASC = AbilitySystemComponent.Get(); if (ASC) { ASC->SpawnedTargetActors.Remove(SpawnedTargetActor); } EndTask(); }
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
SetWaitingOnAvatar() 질문
이거 주석해도 별다른 차이점을 잘 모르겠습니다.내부에 보니, 기다리는 상태 Enum을 Avatar 기준에 둘지/User에 둘지/Game에 둘지 정하는데 정확히 무슨 차이인가요??
- 해결됨이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템
SetupGASInputComponent() 함수 2군데에 작성 질문..
서버 전용 캐릭터든 클라이이언트 전용 캐릭터든 빙의 함수랑 SetupPlayerInputComponent()은 클라이언트에서는 아예 호출이 안되고 관련된 것들은 다 복제로 처리되고, 서버에서는 이 두 함수가 다 호출되면서 SetupGASInputComponent()가 중복 호출 되는 걸로 알고있는데 서버에서 중복 처리는 별로 상관 없는 건가요?