본문 바로가기

게임프로그래밍

(141)
[실습2] 2. 캐릭터 클래스 세팅 1. 무기 매시 만들기 무기는 에너미와 캐릭터 모두에 쓰일 것이다. 그렇기 때문에 베이스 클래스에서 정의할 것이다. UPROPERTY(EditAnywhere, Category="Combat")TObjectPtr Weapon; 웨폰 매시를 저장할 포인터를 만들었으니 실제로 저장하면 된다. AAuraCharacterBase::AAuraCharacterBase(){ PrimaryActorTick.bCanEverTick = false; Weapon = CreateDefaultSubobject("Weapon"); Weapon->SetupAttachment(GetMesh(), FName("WeaponHandSocket")); Weapon->SetCollisionEnabled(ECollision..
[실습2] 1. 캐릭터 클래스 만들기 1. 베이스 캐릭터 클래스 만들기 캐릭터의 베이스가 될 클래스를 만들 것이다. 에너미와 플레이어 모두에게 공통되는 속성이 있을 것이기 때문에 베이스 클래스를 만들고 이곳에서 에너미와 플레이어 클래스를 파생시킬 것이다.   클래스를 만들었으면 첫 빌드를 진행하여 C++ 프로젝트를 만들도록 하자. 베이스 캐릭터 클래스는 실제로 사용하지 않을 것이다.  UCLASS(Abstract)class PRACTICE2_API AAuraCharacterBase : public ACharacter{ GENERATED_BODY()public: AAuraCharacterBase();protected: virtual void BeginPlay() override; }; UCLASS 에 Abstract 메타 지정자를 추가하자. ..
[언리얼 실습] 80. 소울과 골드에 실제 속성 더하기 목차소울과 골드 습득시 캐릭터 속성에 추가에너미가 소울을 드랍하게 하기1. 소울과 골드 습득시 캐릭터 속성에 추가 캐릭터의 속성은 Attribute 클래스에서 담당하고 있고 이곳에 골드와 소울의 양을 저장할 변수를 만들 것이다. UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )class PRACTICE_API UAttributeComponent : public UActorComponent{ GENERATED_BODY()public: UAttributeComponent(); virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction..
[언리얼 실습] 79. 픽업 인터페이스 & 소울 픽업 효과 목차픽업 인터페이스 구현소울 획득시 효과 주기1. 픽업 인터페이스 구현 소울을 획득하는 기능을 구현할 것이다. 소울뿐만 아니라 골드도 획득할 수 있어야 하며 인터페이스를 만들어 이를 구현할 것이다. 인터페이스를 만들자. class PRACTICE_API IPickupInterface{ GENERATED_BODY() // Add interface functions to this class. This is the class that will be inherited to implement this interface.public: virtual void SetOverlappingItem(class AItem* Item) = 0;}; 순수가상함수를 만들었다. 아이템 클래스에는 OnSphereOverlap() 함수..
[언리얼] 77. 플레이어 데스 몽타주 재생하기 목차플레이어 Dead 상태로 바꾸기애니메이션 블루프린트 수정하기1. 플레이어 Dead 상태로 바꾸기 UPROPERTY(BlueprintReadOnly)EDeathPose DeathPose; 에너미 클래스에 있던 DeathPose 를 베이스 캐릭터로 옮기자. 이제 이 변수는 에너미뿐 아니라 플레이어도 쓸 것이다. int32 ABaseCharacter::PlayDeathMontage(){ const int32 Selection = PlayRandomMontageSection(DeathMontage); if (Selection (EDeathPose::EDP_MAX) && Selection > -1) { DeathPose = static_cast(Selection); } return Selection;} 이제..
[언리얼 실습] 76. HUD 변수 초기화 & 체력바 업데이트 목차 오버레이 초기화 하기 체력바 업데이트 하기 함수 수정 준비1. 오버레이 초기화 하기 현재 오버레이를 사용하고 있고 이곳에서 체력과 스테미나 골드, 소울을 보여주고 있다. 이 값들을 초기화 하는 법을 알아보자. 오버레이에서 사용하고 있는 변수들은 캐릭터와 관련된 변수들이고 그렇기에 캐릭터 클래스에서 접근할 것이다. 캐릭터 클래스의 BeginPlay 함수로 들어가자.APlayerController* PlayerController = Cast(GetController());if (PlayerController){ ASlashHUD* SlashHUD = Cast(PlayerController->GetHUD()); } 다음과 같이 하면 HUD 클래스를 가져올 수 있다. SlashHUD 에는 오버레이 변수가 ..
[언리얼 실습] 75. HUD 세팅 목차게임모드 블루프린트 클래스 만들기HUD 블루프린트 클래스 만들기C++ 부모 클래스 만들기1. HUD 만들기 현재 위젯을 만들기는 했는데 이것을 화면에 보여줄 방법이 없다. HUD 클래스를 만들어서 이를 구현해 볼 것이다.HUD 클래스를 만들고 적용하려면 게임모드가 있어야 한다.   게임모드베이스를 부모 클래스로 하고 블루프린트 클래스를 만들자.  월드 세팅에서 게임모드 오버라이드를 블루프린트 클래스로 바꿔주면 된다.2. HUD 블루프린트 클래스 만들기 HUD 블루프린트 클래스를 만들자.  c++ 에서 구현하기 전에 먼저 블루프린트 클래스에서 해보려고  한다.  위와 같이 노드들을 연결해준다. 이제 이 블루프린트 클래스를 게임모드의 기본 HUD 클래스로 바꾸자.  게임을 시작하면 오버레이가 정상적으로 ..
[언리얼 실습] 74. 오버레이 위젯 만들기 목차위젯 만들기C++ 부모 클래스 만들기부모 클래스 바꾸기1. 위젯 만들기 플레이어의 체력을 구현했고 이제 이것을 보여줄 위젯이 필요하다. 위젯 블루프린트를 만들고 루트위젯을 유저 위젯으로 설정하자. 위젯 블루프린트에 들어간뒤 상태창을 이미지로 가져올 것이기 때문에 이미지 요소? 를 드래그하다. 디테일 패널에서 브러시 항목에 우리가 쓸 이미지를 집어 넣고 Size To Content에 체크를 한다.    이제 이 안을 체력과 스테미너 기타 요소들로 채우자. 체력바와 스테미너바는 Progress Bar로 만들 것이다.  프로그래스바를 가져왔으면 이름을 HealthBar로 바꾸고 이미지를 채운뒤 Appearance는 흰색 또는 무색으로 바꾼다.  그리고 위치를 대강 맞게 옮긴뒤 순서를 바꾸자.  Hierar..
[언리얼 실습] 73. 플레이어가 피해를 입게 하기 목차 플레이어 피해 입히기1. 플레이어 피해 입히기 플레이어도 피해를 입게 해보자. virtual float TakeDamage(float DamageAmount, struct FDamageEvent const& DamageEvent, class AController* EventInstigator, AActor* DamageCauser) override; 에너미에 존재하는 TakeDamge 함수를 가져와 선언하자. float AKnight::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser){ HandleDamage(DamageAmount); retu..
[언리얼 실습] 72. 모션 워핑 공격 완성하기 목차워프 위치 고치기모션 부드럽게 바꾸기1. 워프 위치 고치기 현재 에너미가 모션 워핑으로 이동할때 플레이어가 너무 가까운 위치에 있으면 무기에 맞지 않을때가 있다. 그렇기 때문에 워프 위치를 플레이어의 위치보다 살짝 뒤쪽으로 하여 그러한 문제가 생기는 것을 막아보려고 한다. C++에서 이 작업을 해보자. UCLASS()class PRACTICE_API ABaseCharacter : public ACharacter, public IHitInterface{ GENERATED_BODY()protected:UFUNCTION(BlueprintCallable)FVector GetTranslationWarpTarget();UFUNCTION(BlueprintCallable)FVector GetRotationWarpT..