일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Replication
- map design
- Multiplay
- gameplay tag
- Unreal Engine
- 유니티
- nanite
- Aegis
- dirty cow
- 게임개발
- gameplay ability system
- rpc
- CTF
- gas
- unity
- attribute
- ret2libc
- gameplay effect
- animation
- ability task
- listen server
- MAC
- 언리얼 엔진
- 언리얼엔진
- UI
- os
- local prediction
- 게임 개발
- photon fusion2
- gravity direction
Archives
- Today
- Total
Replicated
[Drag Down] Gameplay Tag로 어빌리티 꼬임 방지 본문
어빌리티 쓰던 도중 다른 어빌리티 쓰면
이전 어빌리티가 AnimNotify에서 태그 제대로 못받아서 어빌리티가 제대로 안끝난다
애초에 도중에 다른 어빌리티 쓰는게 의도된 동작이 아니니 막아보자
특정 게임플레이 태그가 있으면 어빌리티가 발동하지 않도록 막을 것이다
ActivationBlockedTags 쓰면 된다
(게임플레이 태그는 정말 쓰면 쓸 수록 너무나 좋은 시스템인 것 같다.)
현재 상태 기반 공격, 점프 공격, 회피
세 종류만 해주면 된다
UDDGA_PushingCharacter::UDDGA_PushingCharacter()
{
NetExecutionPolicy = EGameplayAbilityNetExecutionPolicy::LocalPredicted;
InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor;
static ConstructorHelpers::FObjectFinder<UAnimMontage> PushingMontageRef(TEXT("/Script/Engine.AnimMontage'/Game/Animation/Montage/AM_Manny_Pushing.AM_Manny_Pushing'"));
if ( PushingMontageRef.Succeeded() )
{
PushingMontage = PushingMontageRef.Object;
}
bIsTraced = false;
ActivationBlockedTags.AddTag(FGameplayTag::RequestGameplayTag(FName("Player.State.UsingAbility")));
}
발동 못하게 ActivationBlockedTags에 설정해주고
void UDDGA_PushingCharacter::ActivateAbility(const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData)
{
Super::ActivateAbility(Handle, ActorInfo, ActivationInfo, TriggerEventData);
...
if (UAbilitySystemComponent* ASC = ActorInfo->AbilitySystemComponent.Get())
{
ASC->AddLooseGameplayTag(FGameplayTag::RequestGameplayTag(FName("Player.State.UsingAbility")));
}
...
ActivateAbility에서 태그 달고
void UDDGA_PushingCharacter::EndAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, bool bReplicateEndAbility, bool bWasCancelled)
{
bIsTraced = false;
if (UAbilitySystemComponent* ASC = ActorInfo->AbilitySystemComponent.Get())
{
ASC->RemoveLooseGameplayTag(FGameplayTag::RequestGameplayTag(FName("Player.State.UsingAbility")));
}
...
EndAbility에서 제거해준다
이제 어빌리티가 꼬일 일이 없다
'언리얼 엔진 > Drag Down (캡스톤 디자인)' 카테고리의 다른 글
[Drag Down] 멀티 환경에서 스테미나 UI 제작 및 GAS 연결 (0) | 2025.04.02 |
---|---|
[Drag Down] 이펙트로 어트리뷰트 사용 처리, 어트리뷰트 부족 시 어빌리티 사용 제한하기 (0) | 2025.04.02 |
[Drag Down] 회피 만들기 (0) | 2025.04.01 |
** [Drag Down] RPC In Local Prediction (feat. Root Motion) / (서버->클라이언트 애니메이션 동기화 문제) ** (0) | 2025.03.31 |
[Drag Down] 점프 공격하기 (0) | 2025.03.30 |