Mini

[UE5] 마우스아래 정보 전달용 AT클래스 구현 본문

UE5/Ability Tasks

[UE5] 마우스아래 정보 전달용 AT클래스 구현

Mini_96 2024. 6. 10. 01:11

* 나만의 AT 만들기

마우스 아래 적중된 정보가져오는 AT클래스

- 구현

UCLASS()
class AURA_API UTargetDataUnderMouse : public UAbilityTask
{
    GENERATED_BODY()

    //메타 => 기본값으로 this ==self 지정
    UFUNCTION(BlueprintCallable, Category="Ability|Tasks", meta=(DisplayName = "TargetDataUnderMouse",HidePin="OwningAbility",
       DefaultToSelf="OwningAbility",BlueprintInternalUseOnly="true"))
    static UTargetDataUnderMouse* CreateTargetDataUnderMouse(UGameplayAbility* OwningAbility);
};

단순히 클릭된 Obj를 반환하는 함수임

UTargetDataUnderMouse* UTargetDataUnderMouse::CreateTargetDataUnderMouse(UGameplayAbility* OwningAbility)
{
    UTargetDataUnderMouse* MyObj = NewAbilityTask<UTargetDataUnderMouse>(OwningAbility);
    return MyObj;
}

test
Test

 

* BP에 핀 추가하기

우리는 (MouseTarget)Data 핀이 필요함

BP에 핀추가하려면 델리게이트를 브로드캐스팅 해야함

DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMouseTargetDataSignature, const FVector&, Data);
/**
 * 
 */
UCLASS()
class AURA_API UTargetDataUnderMouse : public UAbilityTask
{
    ...

    UPROPERTY(BlueprintAssignable)
    FMouseTargetDataSignature ValidData;
};

결과 : 핀이 잘 추가된 모습

 

* 실습

- 부모의 Activate 구현

마우스커서의 위치를 방송함

이러면 Data안에 위치값이 들어가는듯하다

void UTargetDataUnderMouse::Activate()
{
    //부모super호출 : 로그만찍음 -> 필요없음

    //1. 마우스 커서의 Location 얻기
    //PC얻기 <= 부모가 갖고있는 Ability 변수
    APlayerController* PC = Ability->GetCurrentActorInfo()->PlayerController.Get();
    FHitResult CursorHit;
    PC->GetHitResultUnderCursor(ECC_Visibility, false,CursorHit); //커서힛에 정보넣어줘
    ValidData.Broadcast(CursorHit.Location); //그 위치 방송
}
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMouseTargetDataSignature, const FVector&, Data);

class AURA_API UTargetDataUnderMouse : public UAbilityTask
{
    ...

    UPROPERTY(BlueprintAssignable)
    FMouseTargetDataSignature ValidData;

유효데이터가 있을때만, Data(마우스 위치)를 사용
결과

 

* 한계

로컬클라에는 정상표시, but 서버에는 0,0,0에 표시됨

즉, 서버에서 모든 데이터가 0인것임

서버는 클라에서 뭔하는지 모르기떄문

클라만이 자신의 마우스 위치를암, 서버로 전송되는 데이터가 아님

- 해결 : 클릭하는 위치를 서버에 알려줘야함

 

* Next Step

클라에서 서버로 데이터 전달방법