전체 글 (164) 썸네일형 리스트형 [실습2] 62. 일정 범위 안에 있는 액터 배열에 담기 1. 서론 일정 범위 안에 있는 액터의 정보가 필요할 수 있다. 오버랩을 이용하여 실시간으로 확인하는 방법도 있지만 굳이 실시간으로 알 필요없이 특정 시점에만 어떤 액터가 있는지 알아야 한다면 쿼리를 이용하면 된다.2. 함수 선언 static void GetLivePlayersWithinRadius(const UObject* WorldContextObject, TArray& OutOverlappingActors, const TArray& ActorsToIgnore, float Radius, const FVector& Origin); 매개변수를 살펴보자.const UObject* WorldContextObject 스태틱 함수이기에 필요한 월드 컨텍스트 오브젝트이다. TArray& OutOverlapping.. [실습2] 61. 에너미에 환경 쿼리 적용하기 1. 환경쿼리 설정하기 행동트리로 들어가자. 노드를 끌면 Run EQSQuery가 보인다. 환경 쿼리를 설정하자. 이제 블랙보드 키를 설정할 수 있는데 점수가 가장 높은 것으로 설정된다. 백터 키를 만들었고 이를 설정하였다. 이제 Move To 노드를 추가하고 해당 위치로 옮기면 된다. [실습2] 60. 환경 쿼리 1. Environment Query 환경 쿼리를 만들어 더 정교한 에너미의 행동을 만들어볼 것이다. EQS의 경우 그냥은 테스트 하기가 힘든데 그렇기에 이를 위한 테스트 폰이 존재한다. 이를 만들어보자. 해당 폰을 살펴보면 쿼리를 설정할 수 있는 부분이 보인다. 이제 환경 쿼리를 설정해보자. 환경쿼리는 제너레이터를 통해 값을 계산할 수 있다. 제너레이터를 생성하면 테스트를 추가할 수 있는데 여기서 트레이스를 추가해보려고 한다. 트레이스는 목표에서 특정 목적지까지 가시성 채널을 추적하여 점수 매기는 방식이다. 컨텍스트를 통해 그러한 목표를 설정할 수 있다. 블루프린트 기반의 클래스를 생성하자. 플레이어 액터를 추적할 것이기 때문에 Provide Actors Set 함수를 오버라이드 하자. 플.. [실습2] 59. 행동트리 테스크 만들기 1. Behavior Tree Task 행동트리에 데코레이터를 추가하여 조건을 만들었지만 정작 그 조건에 따라 어떤 행동을 할지는 정의하지 않았다. 이제 이를 구현하려고 한다. BT테스크 블루프린트 베이스 클래스를 생성하자. 이제 함수를 오버라이드 할것이다. 이 테스크에서 중요한 점은 반드시 끝내야 한다는 것이다. 그렇지 않으면 영원히 이 테스크 안에 머무르게 된다. 아래의 노드를 추가하여 작업을 끝낼 수 있다. 이제 이를 저장하고 행동트리에 추가하자. 실제 구현은 나중에 할 것이다. 행동트리에서 노드를 추가할때 생성한 테스크가 존재하는 것을 볼 수 있다. 이렇게 해서 테스크를 추가하는데 성공하였다. [실습2] 58. 행동 트리 데코레이터 1. 데코레이터 행동트리에서 데코레이터는 일종의 조건문 같은 것이라고 보면 된다. 이러한 데코레이터를 통해 에너미가 이동을 해야할지 아니면 공격을 해야할지 아니면 또 다른 행동을 해야할지 등을 지정할 수 있다.2. 데코레이터 설정하기 이제 데코레이터를 설정해보자. 블랙보드 키를 통해 조건을 확인할 것이다. 디테일 패널에서 키를 선택하거나 다양한 작업들을 할 수 있다. 이제 블랙보드 키를 우리가 원하는 오브젝트로 바꾸자. 이렇게 하면 해당 키가 존재할때만 다음 노드가 실행된다. 이번에는 다른 설정을 하려고 한다. 에너미가 공격 받을 때 동작을 멈춰보려고 한다. 불리언 타입의 블랙보드 키를 추가하도록 하자. 이제 이 값을 초기화 해야하는데 이는 C++에서 진행할 것이다.3. C++에서 블랙보드 키 초기.. [실습2] 57. 블랙보드 키 만들고 가장 가까이 있는 원하는 액터 설정하기 1. 블랙보드 키 블랙보드 키는 행동 트리 내에서 데이터를 저장하고 관리할 수 있는 변수를 말한다. 이것을 통해 가장 가까이 있는 플레이어를 저장할 수 있다. 2. 서비스에서 블랙보드 키 추가하기 서비스에 블랙보드 키를 추가하여 이것을 행동트리의 블랙보드 키와 연동시킬 것이다. 서비스 클래스로 들어가자. 이렇게 블랙보드 키 변수를 추가할 수 있다. 눈 모양 아이콘을 선택하여 이를 노출시키도록 하자. 행동트리에서 확인하면 이렇게 키가 노출되는 것을 볼 수 있다. 디테일 패널에도 이렇게 나타나는 것을 볼 수 있는데 이것을 통해 블랙보드 키를 실제로 할당하는 것이 가능해진다. 위의 키는 테스트용으로 만든 것이기 때문에 삭제해 주자. 이제 실제로 블랙보드 키를 만들어 볼 것이다.3. 블랙보드에 키 추가하기 .. [실습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.. 이전 1 2 3 4 ··· 17 다음