본문 바로가기

게임프로그래밍

(141)
[실습2] 11. Replication Mode 1. Replication Mode 복제와 관련하여 남은 작업들을 진행하도록 하자. 플레이어 스테이이트 클래스의 생성자로 들어가자.AbilitySystemComponent->SetReplicationMode() 레플리케이션 모드를 선택해야 한다. 모드에는 어떤 것이 있는지 살펴보자. UENUM()enum class EGameplayEffectReplicationMode : uint8{ /** Only replicate minimal gameplay effect info. Note: this does not work for Owned AbilitySystemComponents (Use Mixed instead). */ Minimal, /** Only replicate minimal game..
[실습2] 10. GAS와 Attribute Set 추가하기 1. 에너미에 GAS와 Attribute Set 추가하기 IDE에서 캐릭터의 베이스 클래스로 가자 UCLASS(Abstract)class PRACTICE2_API AAuraCharacterBase : public ACharacter{ GENERATED_BODY()public: AAuraCharacterBase();protected: virtual void BeginPlay() override; UPROPERTY(EditAnywhere, Category="Combat") TObjectPtr Weapon; UPROPERTY() TObjectPtr AbilitySystemComponent; UPROPERTY() TObjectPtr AttributeSet;}; G..
[실습2] 9. 플레이어 스테이트 클래스 생성 1. Player State 게임플레이 어빌리티 시스템을 관리할 클래스로 Player State 클래스를 만들 것이다. GAS를 캐릭터 클래스에 할당하면 캐릭터가 사라질때(대표적으로 캐릭터가 죽을때) GAS의 설정 또한 사라질 것이고 이렇게 되면 안된다. 그렇기에 Player State에서 GAS와 캐릭터 클래스 모두를 관리하여 캐릭터와 GAS 자체를 분리할 것이다. 에너미의 경우 에너미가 죽을때 GAS가 사라져도 별 문제가 없기 때문에 에너미 클래스에서 GAS를 관리할 것이다.  플레이어 스테이트 클래스는 일반적으로 네트워크 게임에서 플레이어들의 상태를 관리하고 추적하는데 사용하는 클래스라고 한다. UCLASS()class PRACTICE2_API AAuraPlayerState : public APla..
어빌리티 시스템 컴포넌트 (Ability System Component) ASC의 주요 역할1. 능력(Ability) 관리ASC는 캐릭터가 사용할 수 있는 능력을 정의하고 이를 실행하는 역할을 담당합니다.능력은 일반적으로 GameplayAbility 클래스를 기반으로 정의됩니다.ASC는 다음을 지원합니다:능력 활성화: 특정 조건에서 능력을 활성화.능력 취소: 활성화된 능력을 강제로 취소.능력 쿨다운: 능력이 다시 사용 가능해질 때까지의 대기 시간 관리.2. 효과(Effect) 관리ASC는 능력으로 인해 발생하는 **Gameplay Effect (GE)**를 관리합니다.Gameplay Effect는 캐릭터의 스탯(체력, 마나, 속도 등)이나 상태(스턴, 디버프 등)를 변경하는 역할을 합니다.ASC는 다음을 처리합니다:효과 적용: 능력 실행 시 대상에게 효과 적용.효과 제거: 효..
[실습2] 8. 에너미 하이라이트 하기 1. 베이스 에너미 블루프린트 클래스 만들기 에너미는 에너미끼리 공통되는 속성들이 있고 그렇기에 베이스 클래스가 있으면 좋다. 베이스 에너미 블루프린트 클래스를 만들자. 에너미 베이스 블루프린트 클래스를 만들고 각각의 에너미 클래스로 가서 부모 클래스를 바꿔주면 된다.2. 포스트 프로세스 볼륨 배치 하이라이트 기능은 포스트 프로세스를 이용해 할 것이다. 포스트 프로세스는 본래 광원 등 환경의 후처리를 위해 사용하는 것이라고 한다.  플레이스 액터에서 포스트 프로세스 볼륨을 찾아 배치한다. 아무대나 배치한 뒤 인피니트 익스텐트에 체크를 하여 무한한 공간에 영향을 미치게 한다. 하이라이트를 하기 위해 커스텀 스텐실 뎁스를 사용할 것인데 이를 위해서는 프로젝트 세팅에 들어가야 한다.  Custom Depth-..
[실습2] 7. 에너미 인터페이스 만들고 함수 호출하기 1. 에너미 인터페이스 만들기 에너미 인터페이스를 만들어 더 유연하고 확장성 있는 기능을 구현할 것이다.  인터페이스 클래스를 만들자. 가장 먼저 인터페이스에서 선언할 함수는 하이라이트 기능을 구현하기 위한 함수이다. 에너미에 마우스를 가져다 대면 하이라이트를 하는 기능을 구현할 것이다. class PRACTICE2_API IEnemyInterface{ GENERATED_BODY()public: virtual void HighlightActor() = 0; virtual void UnHighlightActor() = 0;}; 이제 이 인터페이스를 에너미 클래스에 상속 시키면 된다. #include "CoreMinimal.h"#include "Character/AuraCharacterBase.h"#incl..
[실습2] 6. 게임모드를 만들고 플레이어 이동 구현하기 1. 게임 모드 플레이어 컨트롤러를 만들었고 이를 실제로 사용하게 해야 캐릭터가 움직일 것이다. 그러기 위해서는 커스텀 게임모드가 필요하다.  게임모드 베이스를 기반으로 C++ 클래스를 만드려고 한다. 바로 컴파일을 한 뒤 이를 기반으로 블루프린트 클래스를 만들자. 현재는 게임모드에서 할 작업이 딱히 존재하지 않는다.  블루프린트 클래스를 만들고 플레이어 컨트롤러 클래스와 디폴트 폰 클래스를 우리가 원하는 클래스로 바꿔준다. 그리고 월드 세팅을 바꿔준다. 이제 테스트하면 캐릭터가 움직인다. 다만 현재는 캐릭터에 카메라가 존재하지 않아 시점이 이상하다. 탑다운 게임으로 만들것이고 이에 맞는 카메라 설정을 해주면 된다. 카메라는 C++에서 설정할 수도 있고 C++에서 많이 설정하는 것 같지만 사실 블루프린트..
[실습2] 5. 인풋 매핑하기 1. 인풋 매핑하기 컨텍스트를 만들고 이걸 통해 로컬플레이어 서브시스템 클래스까지 만들었다. 이제 인풋 액션을 매핑하는 법을 알아보도록 하자. virtual void SetupInputComponent() override; 해당 함수는 폰이나 캐릭터 클래스의 인풋을 설정하기 위한 함수이다. 이를 오버라이드 하여 사용하자. #include "EnhancedInputComponent.h"void AAuraPlayerController::SetupInputComponent(){ Super::SetupInputComponent(); UEnhancedInputComponent* EnhancedInputComponent = CastChecked(InputComponent);} 플레이어 컨트롤러 클래스에는..
[실습2] 4. 커스텀 플레이어 컨트롤러와 향상된 인풋 1. 인풋 액션과 컨텍스트 만들기 향상된 인풋 기능을 이용해서 캐릭터의 이동을 구현해보겠다. 향상된 인풋을 이용하기 위해서는 인풋액션과 인풋 매핑 컨텍스트가 필요하다.  인풋 액션을 만들자. 이동 액션을 먼저 만들 것이다. 밸류타입을 백터2D로 설정한다. 이제 이것을 컨텍스트에 연결하면 된다.  액션과 키보드 입력을 매핑해준다. 키보드 D의 입력은 X방향으로 이동한다. 액션의 가장 기본이 되는 부분이기 때문에 무언가 건드릴 필요가 없다. A는 D와 반대방향으로 이동한다. 모디파이어를 추가하여 네거티브 밸류를 받을 수 있어야 한다. A키의 경우 Y와 Z축에는 관심이 없다. X축만 선택한뒤 이것을 Negate하자. W키의 경우 Y축을 우선으로 값을 받아야 한다. YXZ 축으로 Swizzle 하자. Swizz..
[실습2] 3. 애니메이션 블루프린트 만들기 1. 플레이어 애니메이션 블루프린트 만들기  먼저 플레이어의 애니메이션 블루프린트를 만들자.  위와 같이 연결해준다. 이제 Main State를 설정해주도록 하자.  휴식, 걷기, 달리기는 블랜드 스페이스를 이용하여 구현하고 있고 이를 완성하기 위해서는 스피드를 구해야 한다. 이벤트 그래프에서 이를 구하도록 하자 오버라이드 함수를 만들어 준다.  Get Pawn Owner의 리턴 값을 플레이어의 캐릭터 클래스로 캐스팅 하고 이를 변수로 승격하여 저장한 뒤,  무브먼트 컴포넌트를 가져와 이를 변수로 만들어 준다. 이제 블루프린트 업데이트 함수에서 계속해서 캐릭터의 속도를 가져오도록 하자.  이런식으로 캐릭터의 스피드를 계속해서 업데이트 해준다. 스테이트로 돌아가 스피드를연결해주면 된다.  2. 에너미 템플..