관리 메뉴

Mini

[UE5] Ability Task 개념, 불 발사 몽타주 구현 본문

UE5/Ability Tasks

[UE5] Ability Task 개념, 불 발사 몽타주 구현

Mini_96 2024. 6. 9. 23:13

* Ability Task 개념

GA가 고용하는 노동자와 같음

GA가 일을시키고 AT가 일하는 개념

직접 일을 하는 애 

종류 : 즉각적, 지속적

 

몽타주도 AT의 한 종류다

* 몽타주 실습

애니클릭 > 몽타주만들기

 

설정
결과 : 손을드는 애니 실행
블랜드 줄이기 => 빨리 애니 실행

 

* next step

애니 특정시점에 불 발사 구현

 

* 애니 특정시점에 불 발사 구현

 

이벤트가 올떄까지 기다리는 함수 이용
태그추가
애님노티파이 BP 만들기
구현
애님몽타주 > 발사원하는 시점에 핀두고, add notify(우리가 anim notify)
태그도 추가
애니가 해당 시점에오면, 우리가만든 AN이 호출된다!
이게 호출됨
send event to actor에 의해, GA의 Event Recived가 실행된다
결과

 

* 할일

이벤트를 수신할때(만), 발사체를 발사하기 구현

c++에서 블루프린트콜러블 함수를 만듬

내용 : 발사체 구현생성하는 함수

void UAuraProjectileSpell::SpawnProjectile()
{
    //발사체는 서버에서생성, 클라는 복제본을 보게될거임
    //발사체가 서버에있는지 어케암?
    const bool bIsServer = GetAvatarActorFromActorInfo()->HasAuthority(); //아바타액텨 ==불 의 권위확인
    if(! bIsServer) return ; //발사체가 서버있는경우만 발사체 생성

    ICombatInterface* CombatInterface = Cast<ICombatInterface>(GetAvatarActorFromActorInfo()); //해당액터가 전투인터를 구현하면, 얻을수있음
    if(CombatInterface)
    {
       const FVector SocketLocation = CombatInterface->GetCombatSocketLocation();
       FTransform SpawnTransform; //발사체생성할 위치 == 지팡이끝 / but, 캐릭터에의존하면안됨, 전투인터페이스에서 소켓위치를 반환받으면 좋겠음.
       SpawnTransform.SetLocation(SocketLocation);
       //TODO : 발사체 회전설정
       
       //<생성하고자하는타입> (클래스, 날아갈 회전값, 수행자, 수행할폰, 충돌-겹침 상관없이 항상생성)
       AAuraProjectile* Projectile = GetWorld()->SpawnActorDeferred<AAuraProjectile>(
          ProjectileClass,
          SpawnTransform,
          GetOwningActorFromActorInfo(),
          Cast<APawn>(GetOwningActorFromActorInfo()),
          ESpawnActorCollisionHandlingMethod::AlwaysSpawn);

       //TODO: 발사체에게 Gameplay Effect Spec 부여 => 데미지 주기위해
       
       
       //발사체 생성완료하려면 발사체를 가져와야함(?)
       Projectile->FinishSpawning(SpawnTransform);
    }
}

이벤트가 받아질때만 발사체 소환함수 연결

 

- End Ability => 능력을 끝내야 능력을 다시 사용할수있게 설계했음.

결과

 

* 문제발견

뒤로 불날림 버그