본문 바로가기

분류 전체보기

(178)
[실습2] 56. 행동트리 커스텀 서비스 만들기 1. 서비스란?역할서비스는 행동 트리 내에서 주기적으로 실행되어 AI의 상태를 업데이트하거나 논리를 평가합니다.백그라운드 작업처럼 작동하며, 게임플레이 상황에 맞는 데이터를 실시간으로 갱신합니다.특징주기적 업데이트: 특정 간격으로 실행되며, 행동 트리에서 동작 중인 노드에 대한 정보를 갱신하거나 논리를 평가.연결된 노드와 상호작용: 서비스가 연결된 노드의 동작에 영향을 미침.블랙보드 업데이트: 서비스가 데이터를 계산하여 블랙보드 값을 갱신.2. 커스텀 서비스 클래스 만들기 서비스 클래스를 만들어 행동트리 내에서 AI의 상태를 업데이트 해보자. 서비스 클래스는 C++가 아닌 블루프린트 클래스로 만들 것을 권장(사실상 강제)하고 있다.    서비스 클래스는 위와 같이 생겼는데 디테일 패널에서 노드 네임과 설..
[실습2] 55. 블랙보드와 행동트리 1. AI 컨트롤러 생성하기 커스텀 AI 컨트롤러 클래스를 생성하여 에너미의 행동을 제어하도록 해보자.  AI 컨트롤러 클래스를 생성한다. 빌드.CS 파일로 들어가 모듈을 추가해주자."AIModule"  이제 AI 컨트롤러 클래스에서 블랙보드와 행동트리를 제어할 것이다.생성자와 행동트리컴포넌트를 담을 포인터를 만들어주자. public: AAuraAIController();protected: UPROPERTY() TObjectPtr BehaviorTreeComponent ;  생성자에서 실제로 할당해준다.AAuraAIController::AAuraAIController(){ Blackboard = CreateDefaultSubobject("BlackboardComponent"); ..
[실습2] 54. 커스텀 게임플레이 이펙트 컨텍스트 사용하기 1. 글로벌 클래스 만들기 어빌리티 시스템에서 글로벌로 사용할 클래스를 만들어 이곳에서 커스텀 컨텍스트 등 다양한 커스텀 기능들을 사용할 수 있게 하려고 한다.   이제 클래스에 함수 하나를 오버라이드 하자.UCLASS()class PRACTICE2_API UAuraAbilitySystemGlobals : public UAbilitySystemGlobals{ GENERATED_BODY() public: virtual FGameplayEffectContext* AllocGameplayEffectContext() const override;};AllocGameplayEffectContext 위의 함수는 게임플레이 이펙트 컨텍스트 객체를 생성하고 초기화하는 함수이다. #include "Aura..
[실습2] 53. 네트워크 직렬화 1. New Serialize 네트워크 직렬화란 데이터를 네트워크상에서 주고 받을 수 있게 객체나 데이터 구조를 바이트로 변환하는 것을 말한다. 게임플레이 컨텍스트 구조체에는 네트워크 시리얼라이즈 함수가 있고 이곳에서 네트워크 직렬화를 진행하여 데이터를 주고 받는 것이 가능해진다. 이 함수를 오버라이드 하여 사용하도록 하자. 오버라이드 하기 전 원래 구조를 살펴볼 것이다. bool FGameplayEffectContext::NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess){ uint8 RepBits = 0; if (Ar.IsSaving()) { if (bReplicateInstigator && Insti..
[실습2] 52. 커스텀 게임플레이 이펙트 컨텍스트 만들기 1. Gameplay Effect Context란? 게임플레이 이펙트 컨텍스트의 설명에는 다음과 같이 나와있다.Data structure that stores an instigator and related data, such as positions and targets Games can subclass this structure and add game-specific information It is passed throughout effect execution so it is a great place to track transient information about an execution-번역기 번역-선동자와 위치 및 대상 게임과 같은 관련 데이터를 저장하는 데이터 구조. 이 구조를 하위 분류하고 게임별..
[실습2] 51. UGameplayEffectExecutionCalculation 클래스 1. UGameplayEffectExecutionCalculation 데미지 효과를 커스텀으로 계산하기 위하여 UGameplayEffectExecutionCalculation 커스텀 클래스를 구현하려고 한다. 해당 클래스를 만들고 아래 함수를 오버라이드 한다.virtual void Execute_Implementation(const FGameplayEffectCustomExecutionParameters& ExecutionParams, FGameplayEffectCustomExecutionOutput& OutExecutionOutput) const override; 해당 함수는 GameplayEffect의 실행로직을 커스텀화 할때 사용하는 함수라고 한다. 매개변수 설명const FGameplayEffec..
[실습2] 50. 에너미가 죽을때 디졸브 적용하기 1. 디졸브 머티리얼 생성하기 다이나믹 인스턴스 머테리얼을 통해 런타임 중 머테리얼을 바꿀 것이다. 이를 통해 매시를 디졸브 매시로 바꾸어 에너미가 죽을때 디졸브 기능을 구현할 수 있다. 캐릭터 베이스 클래스로 가 이 디졸브 머테리얼을 저장할 변수를 만들자.UPROPERTY(EditAnywhere, BlueprintReadOnly)TObjectPtr DissolveMaterialInstance;UPROPERTY(EditAnywhere, BlueprintReadOnly)TObjectPtr WeaponDissolveMaterialInstance; 캐릭터가 죽으면 매시가 위의 머테리얼로 바뀌게 된다. 이제 매시를 바꿀 함수를 선언하자.void Dissolve(); 또한 디졸브의 타임라인을 진행시킬 함수를 선언..
[실습2] 49. Set by Coller로 데미지 설정하기 1. 게임플레이 이펙트의 수정자 매그니튜드를 Set by Coller로 교체하기 현재 발사체는 게임플레이 이펙트의 도움 덕분에 데미지를 정할 수 있다. 하지만 발사체 마다 다양한 데미지 공식을 적용하고 싶다면 (가령 파이어볼에는 불속성, 아이스볼에는 얼음속성을 지정할 수 있다) 게임플레이 이펙트가 아닌 발사체 자체, 즉 어빌리티가 데미지를 설정할 수 있어야 한다. 그리고 이렇게 설정한 데미지를 게임플레이 이펙트에 설정한다. Set by Coller는 키-밸류로 연결되어있는데 이 키의 값은 게임플레이 태그이다. 게임 플레이 태그를 더 추가해야할 것이다. 아래와 같이 사용하여 값을 지정할 수 있다. 키-밸류 페어가 설정되었는데 키는 게임플레이태그, 밸류는 데미지(현재는 하드코딩한 50)이다. FAuraGam..
[실습2] 48. 메타 어트리뷰트 1. 메타 어트리뷰트 만들기 데미지를 입힐때 게임플레이 이펙트가 직접적으로 데미지를 입히는 것이 아닌 메타 어트리뷰트를 통해 데미지를 설정할 것이다. 이렇게 하는 이유는 단순히 하나의 속성으로 데미지값을 정하는 것이 아니라 방어력이나 크리티컬 등의 다양한 요소가 있을 수 있고, 이것을 메타 어트리뷰트에서 처리할 것이기 때문이다. 메타 어트리뷰트는 서버에서만 존재하며 계산 결과를 클라이언트에게 알릴 것이다. 이제 이 메타 어트리뷰트를 만들어보자. 어트리뷰트 세트 클래스로 가서 변수를 선언하자.UPROPERTY(BlueprintReadOnly, Category="Meta Attributes")FGameplayAttributeData IncomingDamage;ATTRIBUTE_ACCESSORS(UAuraAt..
[실습2] 47. 발사체에 대미지 부여 효과를 주는 게임플레이 이펙트 적용하기 1. 게임플레이 이펙트 발사체에 적용하기 게임플레이 이펙트 클래스를 만들고 이것을 발사체에 적용하는 방법을 알아보자. 발사체의 헤더파일로 간다. 게임플레이 이펙트 스펙 핸들을 만들어 이곳에서 게임플레이 이펙트를 관리할 것이다.UPROPERTY(BlueprintReadWrite, meta = (ExposeOnSpawn = true))FGameplayEffectSpecHandle DamageEffectSpecHandle; 이제 이 핸들의 설정은 이 발사체를 생성하는 게임플레이어빌리티에서 설정할 것이다. 게임 플레이 이펙트를 저장할 변수를 만든다.UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)TSubclassOf DamageEffectClass;  스펙 핸들을 만들어야 할 ..