2025. 6. 12 <일정 시간 후 가해지는 데미지를 추가하자>
원본 게임에서는 보스의 방어막이 풀리고 플레이어가 공격할 때, 일정 시간이 지나면 보스에게 데미지가 가해진다
이것은 플레이어 동료가 사격 지원을 도와준다는 설정이다
따라서 유니티에서도 이것을 구현해보고자 한다

다른 Dialogue 스크립트처럼 보통 대사는 따로 작성하는 편인데, 이 기능은 대사 딱 한줄만 들어가므로 지원공격 기능에 합치기로 한다. 대사 스크립트도 많으면 관리하기가 번거롭다,,,

코드의 내용은 간단하다. 처음에 플레이어가 NPC에게 말을 건 뒤 일정 타이머가 끝날때 방어막이 해제된다. 이때부터 25초 뒤에 지원사격이 시작되므로 waitTime(=25f) 동안 기다려준다
지원사격 대사가 출력되기 전에 총을 쏘는 효과음을 들려주고, 이후 공격이 실행될 때 한번 더 뭔가 터지는 소리를 들려준다


요런 식으로 지원사격이 들어가게 된다
2025. 6. 13 <페이즈를 더해보자>
어제 만든 일정 시간이 지나고 보스에게 들어가는 데미지 이후에는 페이즈 2가 다시 시작된다. 여태 구현한 패턴과 과정을 다시 사용하게 되는데 이는 작성했던 스크립트를 일회성이 아닌 재사용을 해야한다
그렇다면 페이즈는 어떻게 참조하는게 좋을까? 잡몹 소환 스크립트, NPC의 대사 모두 페이즈에 다라 달라지는데 공통적으로 기준이 되는 페이즈는 어떻게 참조하는게 좋을까?
어쩌면 싱글톤 패턴이 좋지 않을까? 보스의 페이즈를 관리하는 인스턴스가 전역이므로 데이터를 공유하기 좋다.

단순히 페이즈 숫자만 관리할 보스 페이즈 매니저 스크립트를 작성한다.
앞으로 어떠한 스크립트에서 페이즈 단계를 올릴 일이 있다면 BossPhaseManager.Instance.AdvancePhase() 호출만 해주면 된다

요런식으로 지원공격을 담당하는 스크립트에서 공격이 끝났으면 보스의 방어막을 다시 활성화시키고 페이즈 단계도 올리면 된다!
2025. 6. 14 <페이즈에 따라 변화를 줘보자>
페이즈에 따라 npc의 대사, 그리고 보스몹이 소환하는 기계팔의 개수가 달라진다.
이는 BossPhaseManager의 스크립트의 currentPhase 변수를 참고할 것이다

가령 첫페이즈, 두번째 페이즈, 그리고 마지막 페이즈에 npc대사는 이렇게 구분된다
이것을 currentPhase 변수에 따라 linesToUse 문자배열에 담아두고 출력한다

잡몹이 소환되는 풀매니저 스크립트에서는, 페이즈에 따라 소환되는 수를 조정한다
1페이즈면 3마리, 2페이즈면 5마리, 3페이즈면 7마리를 소환한다
추가적으로 오늘은 보스나 플레이어가 짧은 순간에 여러 타격을 입었을때 순간적으로 빨갛게 변하는 효과가 영원히 있는 오류를 고쳤고, 방어막 타이머가 종료될 때 지금 공격하라는 npc의 대사를 추가했다
2025. 6. 17 <일회성 상호작용을 고쳐보자>
페이즈가 진행됨에 따라 스크립트가 계속해서 재사용되도록 고치고 있다

가령 이 코드는 npc가 플레이어와 상호작용하는 코드이다. 하지만 GetKeyDown을 통한 입력은 일회성 상호작용으로 끝나지 않는가..?! 따라서 보스 페이즈 변수가 계속해서 증가해도 상호작용이 가능하게 해야한다. 페이즈마다 달라지는 대사를 출력해야한다

하지만 1페이즈가 끝나고 다시 말을 걸면 그 대사가 여전히 나타나는 오류가 있었다; 내가 원한건 2페이즈 시작 대사였어...

따라서 대사가 출력되는 대사매니저 스크립트에 텍스트 초기화를 추가했으나 해결이 되지 않았다. 주석으로 처리된 부분이 그렇다

한편 NPC 대사 컨트롤러 스크립트에 대사 매니저의 showDialogue가 제대로 호출되는지 디버그를 넣어봤는데.. 여기가 문제였다. 2페이즈 시작 때 말을 걸어도 해당 디버그가 호출되지 않았다. 그러니까 ShowDialogue 인스턴스가 한번만 호출되고 있었다
해결 방법은... 약간 현타가 올 정도로 간단했는데

NPC 대사 컨트롤러 스크립트를 Awake가 아닌 OnEnable로 수정하면 되었다
내가 괜히 복잡하게 이곳저곳에 대사를 초기화하는 코드를 넣고 있었다; NPC대사 오브젝트가 활성화 될때마다 스크립트도 활성화되도록 하면 되는 것을... 끌끌..

이제 제대로 다음 페이즈 대사가 출력되는 것을 볼 수 있다
오늘도 유니티의 생명주기에 대해서 한층 깨달음을 얻었다.
역시 오류를 오랫동안 앉아서 못 고칠때는 내가 접근한 방식이 먼저 틀리진 않았는지 점검해야한다. 시간은 소중하니까!
2025. 6. 18 <일회성 상호작용을 고쳐보자2>
보스 페이즈가 끝날 때마다 지원사격이 들어가게끔 수정하였다.
또한 페이즈마다 잡몹이 소환되는 갯수와 타이머를 조정하였다. 역시 보스 페이즈의 페이즈 변수를 인스턴스화하여 전역으로 참조하니 활용하기가 참 쉬었다. 이것이야말로 싱글톤 패턴을 사용해보며 가장 유용했던 경험이 아닐까 한다
'Unity' 카테고리의 다른 글
| [Unity] 코드 안티데시스 보스전 리빌드하기 / 8주차 (0) | 2025.07.02 |
|---|---|
| [Unity] 코드: 안티데시스 보스전 리빌드하기 / 7주차 (0) | 2025.06.29 |
| [Unity] 코드: 안티데시스 보스전 리빌드하기 / 5주차 (0) | 2025.06.16 |
| [Unity] 코드: 안티데시스 보스전 리빌드하기 / 4주차 (1) | 2025.06.13 |
| [Unity] 코드: 안티데시스 보스전 리빌드하기 / 3주차 (0) | 2025.05.29 |