전체 글 (178) 썸네일형 리스트형 [실습2] 26. 게임 플레이 이펙트에 게임플레이 태그 적용하고 태그 출력하기 1. 게임 플레이 이펙트에 태그 추가하기 게임플레이 이펙트 클래스로 들어가자 컴포넌트를 추가하면 다양한 기능을 추가할 수 있는데 이 중에서 태그를 추가하는 기능은 Grant Tags to Target Actor와 Tags This Effect Has 가 있다. 각각의 차이는 이름 그대로 이다. 태그를 타겟에게 설정하거나 아니면 게임플레이 이펙트 자체에 태그를 추가하는 것이다. Grant Tags는 지속시간이 있는 효과에만 적용된다. 즉 인피니트나 듀래이션 이펙트에서는 작동을 하지만 인스턴트 이펙트에서는 대상 액터에게 태그를 줄 수 없다. 이제 이런 태그를 C++에서 식별하는 방법을 알아보자.2. 게임플레이 이펙트에 영향을 받으면 델리게이트 호출하기 어빌리티 컴포넌트 클래스에는 게임플레이 효과가 발생하면 .. [실습2] 25. PostGameplayEffectExecute() - 어트리뷰트 변경 후 호출되는 함수 1. PostGameplayEffectExecute(const FGameplayEffectModCallbackData& Data) PostGameplayEffectExecute 위의 함수는 게임플레이 이펙트가 적용되고 난 후 추가적인 작업을 할 때 사용하는 함수이다. 예를 들어 체력이 0이 되면 캐릭터를 데스 상태로 변환하는 등의 작업을 할 수 있다.매개변수 FGameplayEffectModCallbackDataEvaluatedData: 변경된 Attribute와 그 값.Target: 효과를 적용받는 대상.Source: 효과를 유발한 원인(예: 공격자).EffectSpec: 실행된 GameplayEffect의 상세 정보PostGameplayEffectExecute 함수의 매개변수로 전달되는 FGamepl.. [실습2] 24. PreAttributeChange 함수로 클램핑 적용하기 1. 체력과 마나에 클램핑 적용하기 이펙트 액터가 존재하고 그 덕분에 체력이나 마나가 증가하고 감소한다. 하지만 현재 어떤 제한도 걸려있지 않아 그 값이 마이너스가 되게도 하고 최대 체력/마나를 뛰어 넘기도 한다. 이를 방지하려고 하는데 그러기 위해서 Pre Attribute Change 를 이용할 것이다. 어트리뷰트 세트 클래스로 가자. virtual void PreAttributeChange(const FGameplayAttribute& Attribute, float& NewValue) override; 해당 함수는 어트리뷰트가 변경되기 전 밸류의 값을 변환시키는 함수이다. 밸류의 값을 변환 시키는 것이 가능하기는 하지만 클램프 외에 다른 목적으로 사용하는 것은 권장하지 않고 있다. (말이 권장하지 .. [실습2] 23. C++에서 인피니트 게임플레이 이펙트 제거하기 1. 게임플레이 이펙트 제거하기 인피니트 게임플레이 이펙트를 주면 그 효과는 수동으로 제거하기 전까지 계속 지속된다. 이제 이 효과를 취소하는 법을 알아보자. 어떤 효과를 제거하고 어떤 효과를 제거하지 않을지 표시할 수 있으면 좋을 것이다. 이를 열거형으로 정의하려고 한다. UENUM(BlueprintType)enum class EffectApplicationPolicy : uint8{ ApplyOnOverlap, ApplyOnEndOverlap, DoNotApply}; 그리고 이제 각각의 게임플레이 이펙트에 대해 정책을 설정해준다.UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Applied Effects")TSubclassOf Instan.. [실습2] 22. 인스턴트 게임플레이 이펙트 1. 인스턴트 게임플레이 이펙트 클래스 만들기 이펙트 액터에서 시전할 효과를 부여해주는 게임플레이 이펙트를 만들어보자. 제일 처음 만들 것은 인스턴트 게임플레이 이펙트이다. 게임플레이 이펙트 블루프린트 클래스를 만들도록 하자 이제 이곳에서 다양한 효과들을 지정할 수 있다. 지금은 인스턴트, 즉 최초에 한번만 적용하는 효과를 만들 것이다. 모디파이어를 이런 식으로 수정하면 체력값을 바꾸는 게임플레이 이펙트가 되는 것이다. 이제 이 이펙트를 이펙트 액터에 지정해주고 블루프린트 콜러블 함수를 호출하면 된다. C++에서 이 이펙트를 저장하고 있는데 이를 블루프린트에서 노출가능하게 바꾸고 이곳에 대입할 것이다.UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="A.. [실습2] 21. 이펙트 액터 기능 구현하기 1. 이펙트 액터 리팩터링 지난 번에 이펙트 액터 클래스 자체는 만들었지만 따로 특별한 설정은 하지 않았다. 이제 게임플레이 이펙트를 통해 플레이어의 어트리뷰트 속성에 영향을 주게 만들어보자. class PRACTICE2_API AAuraEffectActor : public AActor{ GENERATED_BODY() public: AAuraEffectActor();protected: virtual void BeginPlay() override; UFUNCTION() virtual void OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp.. [실습2] 20. 어트리뷰트 변경사항 적용하기 1. 어트리뷰트 변경시 브로드캐스트 하기 현재 위젯 컨트롤러는 처음 초기값을 브로드캐스팅한다. 이러한 브로드캐스팅은 한번만 하고 끝이 아니라 값이 변경될때마다 지속적으로 호출되어야 할 것이다. 베이스 위젯 컨트롤러 클래스로가 델리게이트들을 바인딩 할 수 있는 함수를 만들 것이다. 이렇게 하면 이를 상속받는 모든 컨트롤러가 해당 함수를 사용할 수 있을 것이다. virtual void BindCallbacksToDependencies();베이스 클래스에서 실제 정의는 하지 않을 것이니 빈 함수 몸체를 놓아두면 된다. 자식 클래스에서 이를 오버라이드하여 사용하자. 이제 자식클래스에서는 바인딩할 함수를 만들어야 한다. protected: void HealthChanged(const FOnAttributeC.. [실습2] 19. 초기값 위젯에 브로드캐스팅하기기 1. 서론 오버레이 위젯은 지금 자신의 위젯 컨트롤러를 가지고 있으며 그렇기에 위젯 컨트롤러에 접근할 수 있다. 물론 위젯 컨트롤러는 자신을 소유하고 있는 대상이 누군지 알지 못한다. 단방향 의존성으로 구성되어 있기 때문이다. 위젯 컨트롤러가 알고 있는 것은 그저 자신이 가지고 있는 4개의 주요 변수들이다. 컨트롤러는 자신을 소유하고 있는 위젯에 대해 알지 못하기 때문에 이러한 변수들을 브로드캐스트하여 자신을 소유하고 있는 위젯에게 그 값을 넘긴다. 이제 브로드캐스트하는 방법을 알아보자.2. 위젯 컨트롤러에서 브로드캐스트 하기 위젯 컨트롤러 클래스로 들어가자. 이때 오버레이 위젯 컨트롤러가 아닌 베이스 위젯 컨트롤러로 들어갈 것이다. 퍼블릭 공간에 함수를 선언한다.virtual void BroadCast.. [실습2] 18. 위젯 컨트롤러로 설정하기 1. 위젯컨트롤러 변수들 할당하기 전에 위젯 컨트롤러 클래스를 만들고 변수들을 선언하기는 했다. 하지만 선언만 했을 분 실제로 할당하지는 않았는데 이 변수들을 할당하는 방법을 알아보자. UPROPERTY(BlueprintReadOnly, Category="WidgetController")TObjectPtr PlayerController;UPROPERTY(BlueprintReadOnly, Category="WidgetController")TObjectPtr PlayerState;UPROPERTY(BlueprintReadOnly, Category="WidgetController")TObjectPtr AbilitySystemComponent;UPROPERTY(BlueprintReadOnly, Category=.. [실습2] 17. HUD 만들기 1. HUD 클래스 생성 HUD 클래스를 만들어 위젯을 등록해보도록 하자. C++ 클래스를 먼저 생성하자. 위젯을 HUD에 그리기 위해서는 인스턴스를 저장할 변수와 이 인스턴스의 타입을 정할 클래스가 필요할 것이다. class PRACTICE2_API AAuraHUD : public AHUD{ GENERATED_BODY()public: UPROPERTY() TObjectKey OverlayWidget;private: UPROPERTY(EditAnywhere) TSubclassOf OverlayWidgetClass; }; 이제 제대로 만들어졌는지 테스트를 해보자. 단순히 비긴 플레이 함수에서 위젯을 보여주는 작업을 할 것이다. void AAuraHUD::BeginPlay(.. 이전 1 ··· 3 4 5 6 7 8 9 ··· 18 다음