본문 바로가기

포트폴리오 제작48

Project_P 몬스터 AI 개선(행동트리 테스크를 활용하여 몬스터 회전) 문제점 기존에는 몬스터의 이동방향으로 회전을 Pawn의 옵션인 Orient Rotation to Movement를 활성화 하여 회전을 시켰다.그러다 보니 다음과 같은 문제점이 생겼다.AIPerception 컴포넌트가 AIController에 달려있다행동트리에서 언리얼에서 제공해주는 MoveTo 테스크를 Vector로 이동시 AIContorller의 로테이션값이 바뀌지 않는다 MoveTo 테스크를 Actor로 이동하면 AIController의 로테이션값이 바뀐다위의 문제들로 인하여 AIPerception의 시야감각의 포지션이 처음 몬스터가 바라본 곳으로 고정된다 이로 인해 행동트리에서 MoveTo로 이동하기 전 이동 백터로 회전시키는 테스크를 추가했다. Monster 설정 AIController가 몬스.. 2025. 6. 4.
Project_P AI Perception Damage Sense 적용 Damage Sense기존 몬스터 AI는 몬스터 뒤로 몰래 다가가 때려도 바보처럼 맞기만 했다.그래서 AI Perception에서 제공하는 Damage Sense를 활용하여 몬스터가 공격당하면 플레이어를 감지할 수 있도록구현 해보았다. Damage Sense 생성APPAIController 헤더파일virtual void PerceptionSensedDamage(APawn* Pawn_);UPROPERTY(VisibleAnywhere)TObjectPtr SenseConfig_Damage; virtual void PerceptionSensedDamage(APawn* Pawn_);ActorPerceptionUpdated 함수에 들어온 FAIStimulus이 Dmage일경우실행할 함수TObjectPtr Sense.. 2025. 5. 30.
Project_P Damage UI 제작(4) 플레이어 컨트롤러에서 UI 생성 플레이어 컨트롤러에서 UI 생성APPPlayerController.hclass PROJECT_P_API APPPlayerController : public APlayerController{ GENERATED_BODY() public: APPPlayerController();//Damage UI Sectionpublic: void ActorTakedDamage(const float& Damage, const FVector& ActorPosition);protected: UPROPERTY(EditAnywhere, Category = "HUD") TSubclassOf DamageUIClass; UPROPERTY(VisibleAnywhere, Category = "HUD") TArray> DamageUIArra.. 2025. 3. 27.
Project_P Damage UI 제작(3) UI 블루프린트 생성 C++로 생성한 DamageUI 블루프린트로 생성 콘텐츠 브라우저에서 우클릭 → 유저 인터페이스 → 위젯 블루프린트 클릭C++에서 생성한 클래스를 부모로 블루프린트 클래스 생성 UI 구성은 간단하게 SizeBox 안에 텍스트 블럭을 넣음텍스트 블럭의 이름은 반드시 C++ 클래스에서 생성한 변수 이름과 똑같아야 됨 블루프린트 에디터 밑에 애니메이션을 클릭하여 애니메이션을 생성 및 설정애니메이션도 텍스트와 마찬가지로 C++에서 생성한 변수와 이름이 같아야됨 2025. 3. 27.
Project_P Damage UI 제작(2) Damage UI 생성 UUserWidget을 상속받아 Damage UI 생성DamageUI.hclass PROJECT_P_API UPPFloatingTextUserWidget : public UUserWidget{ GENERATED_BODY()public: UPPFloatingTextUserWidget(const FObjectInitializer& ObjectInitializer); virtual void NativeConstruct() override;public: bool SetTextWidget(const float& Damage, const FVector& ActorPosition); FEndLifeTime EndLifeTime; FWidgetAnimationDynamicEvent AnimFinishedDelegate.. 2025. 3. 27.
Project_P Damage UI 제작(1) 로직 구성 기존 IPPGameInterface 에 함수 추가IPPGameInterface.hclass PROJECT_P_API IPPGameInterface{ GENERATED_BODY() // Add interface functions to this class. This is the class that will be inherited to implement this interface.public: virtual void OnPlayerDead() = 0; virtual void OnTakeDamage(const float& Damage, const FVector& ActorPosition) = 0;};Damage UI 도 데미지를 받으면 게임모드를 통해 PlayerController에서 UI를 생성함그래서 Ga.. 2025. 3. 26.
Project_P AI Perception 팀설정 AI Perception 팀설정하기기존에 AI Perception을 이용해 몬스터의 시야기능을 구현 했었다.그 당시에는 팀설정이 안되어 있어서 적, 아군, 중립 탐지 설정을 전부 true로 설정을 했었다최근에 캐릭터 액터에 팀을 설정하는 법을 알게되어 적용해 보았다. IGenericTeamAgentInterface 인터페이스 상속APPCharacterBase.h#include "GenericTeamAgentInterface.h"UCLASS()class PROJECT_P_API APPCharacterBase : public ACharacter, public IGenericTeamAgentInterface{ GENERATED_BODY()//GenericTeam Sectionpublic: virtual voi.. 2025. 3. 25.
Project_P 재시작 UI 제작 UUserWidget을 상속받아 GameOverUserWidget 클래스 생성 헤더파일UCLASS()class PROJECT_P_API UPPGameOverUserWidget : public UUserWidget{ GENERATED_BODY() public: UPPGameOverUserWidget(const FObjectInitializer& ObjectInitializer);protected: virtual void NativeConstruct() override; UFUNCTION(BlueprintCallable, Meta = (DisplayName = "BtnEventGameRestartCpp")) void BtnEventGameRestart();protected: UPROPERTY(meta = (.. 2025. 2. 10.
Project_P 캐릭터 사망시 UI 출력 및 재시작 함수 흐름도 게임모드를 간접참조하기 위한 인터페이스 생성 캐릭터 클래스에서 캐릭터가 죽을때 호출되는 SetDead()함수가 호출된다SetDead 함수에서 게임을 관리하는 게임모드를 통해 PlayerController 에게 재시작 UI를 띄우라고 함수를 실행한다이 과정에서 캐릭터에서 상위 레이어인 게임모드를 직접 참조하기 보다 인터페이스를 이용하여 간접참조를 한다 IPPGameInterfaceclass PROJECT_P_API IPPGameInterface{ GENERATED_BODY() // Add interface functions to this class. This is the class that will be inherited to implement this interface.public: v.. 2025. 2. 7.