25년 4월

3주차

어빌리티 쿨타임 구현

쿨타임 타이머가 실행할 때 어빌리티의 실행하지 못하도록 설정

어빌리티가 Deactive될 때 쿨타임 타이머가 실행

 

드론의 미사일 발사 어빌리티를 플레이어가 아닌 드론 컨트롤러가 갖고 있도록 리팩토링

드론을 스폰하는 어빌리티와 미사일 발사 어빌리티를 플레이어가 갖고 있어 기존에는 스폰 어빌리티에서 미사일 발사 어빌리티로 교체되는 구조였음

따라서 드론 스폰 어빌리티가 Destroy되기 때문에 어빌리티의 상태를 관리하기 어려움

그래서 어빌리티 교체하는 시스템을 제거하고 드론 미사일 발사 어빌리티를 드론 컨트롤러가 갖고 있도록 수정

플레이어는 드론을 스폰하고 드론 컨트롤러에게 어빌리티를 실행하도록 요청

어빌리티 객체를 유지하여 상태를 관리할 수 있고, 각 어빌리티를 기능의 주체자가 소유하여 코드가 단순해짐

 

HUD 총기 정보 UI 구현

HUDUIController에서 MagazineCount, TotalMagazineCount Type의 StatusUserWidget을 소유하여 각 장전 탄창 수, 보유 탄창 수를 반환할 수 있도록 함

HUDUIController에서 Fire, Reload 등 델리게이트가 호출될 때 MagazineCount, TotalMagazineCount에게 탄창 수를 반환 받아 TextBlock을 수정 

 

AMFHOFireArm의 RPC가 제대로 호출되지 않는 현상 수정

AMFHOFireArm를 스폰할 때 Owner를 설정하지 않았는데, Owner를 설정하지 않아서 Connection을 알 수 없어 RPC가 제대로 호출되지 않음

스폰할 때 FActorSpawnParameters를 통해 Owner 설정

 

CurrentActivatedEquipment가 리플리케이트 되지 않는 현상 수정

CurrentActivatedEquipment가 리플리케이트 액터가 아니었기 때문에 CurrentActivatedEquipment를 리플리케이트 액터로 변경하여 수정

 

HUD Player HP UI 구현

HUDUIController에서 StatusUserWidget을 상속 받는 HP 블루프린트 Widget을 소유

HUDUIController에서 HP 변경 이벤트를 받으면 StatusUserWidget에게 반환된 HP 퍼센트에 맞게 HP Widget의 블록들의 색상을 설정

 

StatusUserWidget 구현

StatusUserWidget의 StatusType을 블루프린트 에디터에서 지정하면 해당 Enum에 맞는 스텟을 StatusUserWidget에서 반환

 

2주차

UI 프레임워크 및 룰 설계

 

MFBaseUserWidget : UI의 기본 기능 및, UserWidget의 기본 기능을 구현

MFXXUserWidget : 콘텍스트에 독립적인 UI 요소(ex. HP바, 스텟 표시, 아이템 슬롯 등)

 

MFBaseUIController : Controller의 기본 기능을 구현

MFXXUIController

  • 각 콘텐츠를 담당하는 UI 관리자(ex. HUD, Invetory 등)
  • MFUserWidget을 소유하고 관리할 수 있음

  • UserWidget은 AddToViewport 불가능 : MFBaseUserWidget::AddToViewport를 막기 위해 NameHiding 사용
    • UserWidget 포인터를 사용한다면 막지 못하는 한계는 있음
  • UI는 게임플레이 로직을 수정하지 않음
    • 수정을 요청하는 함수를 호출할 수는 있지만 Setter 함수나 직접적으로 수정해서는 안됨
  • 블루프린트가 바이너리이므로 코드가 많이 복잡하지 않는 이상 블루프린트 그래프를 사용하지 않음

+ Recent posts

목차