지금 OnInterruptedCallback()에서 EndAbility를 호출 하고 마지막 인자만 true로 넣어서 취소 표시만 해주는거 같은데 이렇게 했더니 어빌리티에서 활성화로 넣어준 태그가 중간에 공격을 받거나 다른 상태에 빠져서 애니메이션이 취소가 되면 태그가 사라지지 않는 문제가 생기더라고요. Cancel을 호출하는 식으로 변경해야 되는게 맞을지 궁금해서 남겨둡니다 .
1,2 강을 마무리 하며, HasMatchingGameplayTag 는 해당 게임플레이 테그가 현재 ASC 에 등록이 되어 있는지 체크하는 것으로 이해했는데요. HasMatchingGameplayTag 없다면 TryActivateAbilitiesByTag 를 통해 ABTAG_ACTOR_ROTATE 테그를 실행함으로서, ABTAG_ACTOR_ISROTATING 도 같이 asc 에 등록이 되고 CancelAbilities 를 통해 해체가 되면 ABTAG_ACTOR_ROTATE, ABTAG_ACTOR_ISROTATING 둘다 asc 의 테그 목록에서 사라진다. 이렇게 이해해야 하나요?
안녕하세요 교수님. 좋은 강의 항상 감사합니다. 강의 후반부에 StartInputAbility에 태그를 달아주는 부분을 보여주셨는데 그렇다면 강의 초반에 사용했던 StartAbility, StartInputAbility들 모두에 GiveAbility를 호출해야하나요? 제 생각에는 StartInputAbility에만 해줘도되지 않나 궁금해서 질문드립니다. 감사합니다
AnimNotify 를 상속받아 Custom AnimNotify 를 만들고 Animation blueprint 의 track 에 추가했습니다. 잘 작동한 듯 하나, 에디터를 껐다 켜면, 트랙상에 AnimNotify 가 녹색으로 바뀌어 있고 동작하지 않습니다. 지우고 새로 작성, 리빌드 다 해봤는데 안됩니다. 에디터에서 클래스를 인식하지 못하면 녹색으로 나온다고 하는데 어떻게 수정해야 하나요? 에디터가 켜져 있는 동안 추가하면 분홍색으로 DeadCheck 라고 뜨는데 껐다 켜서 확인하면 GASDeadCheck 라고 녹색으로 떠 있습니다.
언리얼 5.6으로 진행하다가 이상한 버그가 터져서 다시 5.4로 복습도 할겸 해서 처음부터 만들어보고 있는데 콤보 공격할 때 ActivateAbility가 발동되고 콤보의 첫번째 공격이 끝나게 되면 무조건 EndAbility가 발동합니다. 5.6으로 했을때와 5.4로 했을때의 코드적으로 다른점도 없는데 왜 처음에는 첫번째 공격을 하고 두번째 콤보 공격을 하면 EndAbility가 아닌 ActivateAbility가 다시 호출되고, 두번째 할때는 왜 첫번째 공격이 끝나면 무조건 EndAbility가 호출될까요..??ㅠ
현재 버전(5.6)에서 modifier op 는 Add가 아니라 Add(Base) 로 기재되어 있는데, 그럼에도 불구하고 강의의 내용과 똑같이 Current Value만을 변경합니다. 그렇다면 현재 버전의 Add(Base) 에서 Base 는 무슨 의미일까요...? 설명이 잘못된건가요? 마치 Base 에 Add를 하는 것 같아서 오히려 혼동을 불러일으키는 느낌인데
정석적으로 코드를 변경하기 전에 에디터를 실행하려 하면 ensure(CurrentAttributeSet); 부분에서 에러가 발생하는데, 해당 시점에 CurrentAttributeSet 이 null 이라 에러가 발생하는 것이라면, 이를 피하기 위해 정석적으로 변경 한 후에 똑같은 시점에서 if문을 통과하는 방식으로 바꾼것 까진 이해했습니다. 1. 근데 에디터 실행 시점에는 해당 CurrentAttriabuteSet 이 null 이었다가, 게임 시작 시점에는 값이 채워지는데 이유가 무엇인가요? 게임 시작시점에는 문제 없으나 에디터를 실행할때 ensure 구문으로 인해 위와 같은 불필요한 크래쉬가 발생한다면, 그냥 ensure을 안쓰고 if문으로 처리하는게 일반적인가요?
안녕하세요. UABGA_AttackHitCheck::OnTraceResultCallback 구현에서 질문 드릴 게 있습니다. UABCharacterAttributeSet* TargetAttribute = const_cast<UABCharacterAttributeSet*>(TargetASC->GetSet<UABCharacterAttributeSet>()); 게임 로직 만들면서 AttributeSet 의 값을 변경해야 할 경우가 많을 것 같은데요. ASC 에서 변경가능한 AttributeSet 의 참조나 mutable 포인터를 반환하는 함수를 구현하지 않은 이유가 있나요? const_cast 로 억지로 const 를 벗겨내는 게 자연스럽게 느껴지진 않아서요. 다른 곳에서 값을 변경하게 코드를 작성해야 하는 디자인 측면이 있는 건지, 경험적인 정책 측면이 있는 건지 궁금해서 질문 드렸습니다.
안녕하십니까. 1강 2강 4강을 수강한 학생입니다. 다름아니라, 6강에서 NonPlayer의 경우에는 ASC와 AttributeSet을 직접 들고 있는 이유가 궁금해서 질문을 드리게 되었습니다. Player의 경우에는 Owner를 PlayerState로 설정하고 Avatar를 Character로 설정하는 것이 네트워크 멀티 플레이어 환경에서 적합하다고 저번 시간에 학습했는데, NonPlayer는 그렇게 하지 않는 이유가 궁금합니다. 언리얼 엔진에서도 Player State 클래스만 제공해주고 NonPlayer State 클래스는 제공하지 않던데, 이 부분도 멀티 플레이 부분과 연관이 있을까요?
수업내용은 아니 장판 스킬을 만들고싶은데 구상한바로는 액터를 생성하고 capsuleComponent를 붙여서 Overlap이 발생할때 데미지를 주는 방식으로 만들려고하는데요 Collision부분에서 걸리는게 있습니다. 지금 이 장판액터는 몬스터나 플레이어들만 Overlap이 되고 나머지는 무시를 해야하는데요 이러면 장판액터가 바닥에고정되어있지않고 땅으로 꺼지는현상이 발생합니다. PhysicsSimulate를 꺼도 이런현상이 발생합니다 바닥이랑만 Block되게 만드는 방법도 있지만 혹시 다른방법이 있을까요?
안녕하세요. GAS Ability 의 Cooldown GameplayEffect (이하 GE) 를 등록하는 부분에 대해 질문이 있습니다. 먼저 실습을 5.4 버전으로 진행하고 있음을 알립니다. 강의 내용에서는 Cooldown GE 적용 시 Cooldown GE BP 를 생성하여 HasDuration 옵션으로 GameplayTag 를 설정 Cooldown을 적용하려는 GA의 Ability Block Tag 에 Cooldown GE에 설정한 GameplayTag를 추가 위와 같이 진행을 해주셨는데, 5.4에서는 2번 과정이 불필요했습니다. 엔진 코드 내부에서는 CheckCooldown 함수 내부에서 Cooldown GE 의 GrantedTag로 직접 쿨다운 체크를 하는걸로 보입니다. 이 부분이 5.4가 되면서 개선된 부분일까요?
1 . RegisterGameplayTagEvent 델리게이트 질문 ASC->RegisterGameplayTagEvent(ABTAG_CHARACTER_INVINSIBLE, EGameplayTagEventType::NewOrRemoved).AddUObject(this, &UABGASHpBarUserWidget::OnInvisibleTagChanged); 다음 코드를 다음과 같이 이해했는데 맞을까요? INVINSIBLE 태그가 GE에 부착(count+1)되거나 탈착(count-1)될때 알림을 주는 델리게이트. 기본 count=0 2.Pre/PostGameplayEffectExecute 함수 질문 저는 이 함수가 ApplyGameplayEffectSpecTo~함수로 GE를 실행시키기 직전이랑 직후에 호출되는 걸로 알고 있습니다. PreGameplayEffectExecute 함수는 게임 플레이 이팩트 적용 전에 호출된다고 들었는데요. 하지만 확인해본 결과 ,공격할 때 게임 플레이 이팩트가 실행되어 DamageAttritbute값이 Modifier연산을 통해 30으로 변경된 이후에PreGameplayEffectExecute 함수가 호출되었습니다. "게임 플레이 이팩트 적용 전" 이란 말이 GE를 실행하기 직전, 즉 Modifier연산이 아직 되기 전으로 이해하고 있었는데 이게 아닌가요? PreGameplayEffectExecute와 PostGameplayEffectExecute의 정확한 차이가 뭔지 햇갈립니다. 그리고 GE_AttackHitBuff 가 발동하면 Pre/PostGameplayEffectExecute 함수가 호출되는지 테스트를 해봤는데 제 생각과는 다르게 호출이 안됩니다. (Data.EvaluatedData.Attribute == GetAttackRadiusAttribute()) 이런식으로 조건문을 넣어서 디버깅을 했는데 전혀 들어오지를 않네요.GE_AttackHitBuff도 다른 GE와 마찬가지로 Pre/PostGameplayEffectExecute 함수에 들어와야 정상아닌가요? 3 . 중첩 버프 질문 instant는 Base값을 변경하지만, 기간형은 Current값을 변경한다고 들었는데요. AttackRaius의 Base값이 50이고 Current값은 0 으로 시작해서, 공격할수록 Current에 +15씩 증가해 Base값을 직접 수정하지 않고 Current 값만 증가시켜서 어떻게 범위를 키우는 거죠? Base값은 아예 안쓰고 하나요? 내부적으로 어떻게 돌아가는지 좀 햇갈립니다. 그리고 Duration과 Stack 에 대해 다음과 같이 이해했는데 이게 맞을까요? Duration을 2초로 했을 때, 2초가 지나기 전에 공격해서 다시 한번 GE를 동작시키면 2초로 다시 리셋되고 스택이 쌓이는데, 2초를 놓칠경우 Current값이 처음으로 돌아와서 범위가 기본으로 리셋된다.