[UE5] Lena: Dev Diary #3 - Enemy 무기 오류 해결

ChangJin·2024년 6월 10일
0

Unreal Engine5

목록 보기
94/102
post-thumbnail

2024.06.10

깃허브!풀리퀘!
https://github.com/ChangJin-Lee/SimpleShooter https://github.com/ChangJin-Lee/SimpleShooter/pull/2

적 캐릭터가 무기를 들고 있지 않던 문제를 해결했다.문제의 원인은 블루프린트에서 On Changed 함수 노드를 사용하지 않아서였다.

진행상황

  • ✅ 적 캐릭터의 이동, 공격 구현
  • ✅ 적 캐릭터의 플레이어 추적 구현
  • ✅ 캐릭터 사망 애니메이션
  • ⬜ 더 다양한 캐릭터가 적으로 등장하기
  • ✅ 적 캐릭터가 무기를 들지 않고 있던 문제
  • ⬜ 적 캐릭터가 무기를 조준하지 않는 문제
  • ✅ HUD에서 플레이어의 체력이 등장하지 않음



들어가기에 앞서 이번 주의 개발 계획이다.

이번 주 개발 계획

  • 적 캐릭터의 무기 관련 오류 해결
  • 적 캐릭터 다양하게 스폰하는 방법 탐구
  • 퍼즐 기믹 추가


무기가 등장하지 않던 문제

  • 마지막 개발 상황에서 잘 보면 적 캐릭터가 무기를 들고 있지 않다.

무기를 들고 있지 않는 적 모습

  • 원인은 무엇이고 왜 이런 현상이 발생했던 것일까?

  • 우선 AI에 대한 처리를 하기전에 내가 구현해놓은 플레이어의 무기 관련 블루프린트를 살펴보았다.


Overlay에 변화가 생겼을 때 적용시켜주는 구조

  • 분명히 Base_Character.h에서 다음처럼 AI의 행동에 대한 Event 함수를 작성해두었고
	UFUNCTION(BlueprintImplementableEvent, Category = "OverLay Slot")
	void DrawAIWeapon();

	UFUNCTION(BlueprintImplementableEvent, Category = "OverLay Slot")
	void PutDownAIWeapon();

  • AI Behavior Tree Node Reference의 Services로 플레이어가 시야에 들어왔을 때 해당하는 함수를 실행하도록 만들어 두었다.

	if(AIController->LineOfSightTo(PlayerPawn))
	{
		ShooterCharacter->ToggleIsArmed();
		ShooterCharacter->DrawAIWeapon();
		AIController->GetBlackboardComponent()->SetValueAsObject(GetSelectedBlackboardKey(), PlayerPawn);
	}
	else
	{
		ShooterCharacter->ToggleIsArmed();
		ShooterCharacter->PutDownAIWeapon();
		AIController->GetBlackboardComponent()->ClearValue(GetSelectedBlackboardKey());
	}

  • 마지막으로 해당 Event 처리를 블루프린트에서 해두었다.
수정 전 Base_Character 블루프린트


  • 바로 이 블루프린트 부분이 문제였다.

  • 잘 살펴보면 Ovelay State를 Set해주고 단순히 OverLay 변수를 적용시키고 있다. 즉, 플레이어에서 만들었던 것처럼 On Overlay State Changed를 만들어서 Overlay State가 바뀔때 어떤 함수를 실행하도록 만들어 주어야한다.


  • 비헤이비어 트리 색처럼 보라색으로 코멘트를 달아주었다.
수정 후 Base_Character 블루프린트

  • 이제 다음처럼 정상적으로 적 캐릭터가 무기를 소지하고 있다.

  • 하지만 아직 무기를 조준하는 기능이 구현되어 있지 않다. 다음 개발 계획으로 넣어두어야겠다.

수정 후 Base_Character 블루프린트
profile
Unreal Engine 클라이언트 개발자

0개의 댓글