2025. 5. 17 <생일 축하해 나자신>
지난 날 동안 생일 겸 알바가 겹쳤다
생일 축하한다 나자신!
게임 시작 시 나오는 안내 문구를 추가하고 있다.
2025. 5. 18 <시작 시 문구 추가>
알만툴에서 사용했던 효과음을 가져와서 import했다. (+무기를 휘두를 때도 효과음을 추가했다)
글자가 나오는 코드, 마지막 문구까지 출력된 후 클릭을 기다리는 것 모두 코루틴으로 구현했다.
글자가 출력될 때 너무 따각따각 효과음이 나왔었는데 두 글자마다 한번씩 재생하여 해결하였다
문뜩 사소한 함수라도(ex. 클릭 기다리기) 이걸 코루틴으로 구현하면 손해가 아닐까..? yield return null;을 해야하므로..?
이를 간단하게 Update로 구분할 수 있는 것이 더 좋지 않을까 궁금해진다.
가령 Update로 마우스 입력을 제어할 경우 대사창이 떠 있을 때 별도로 예외처리를 해서 입력 받으면 된다.
코루틴의 경우 특정 이벤트에서 기다리는 로직을 구현할 수 있다.
https://discussions.unity.com/t/coroutines-vs-update/428844/4
사실 잘 몰라서 유니티 포럼을 읽어보았다
매 프레임마다 확인해야 한다면 Update, 일시 정지나 부드럽게 처리해야 하는 작업의 경우 코루틴이 더 적합하다고 한다.
후자의 경우 내가 쓴 예시로 페이드 인/아웃이나 진압봉이 휘둘러지는 애니메이션(?)이 있겠다. 무엇보다 코루틴으로 작성한 구문이 좀 더 깔끔해 보이기도 하니까..!(주관적인 의견이다)
다음은 옵저버 패턴으로 플레이어의 체력바를 구현해보자~
2025. 5. 19 <옵저버 패턴을 적용해 플레이어 체력바를 구현하자>
https://velog.io/@mingyo0125/C-Unity-%EC%98%B5%EC%A0%80%EB%B2%84-%ED%8C%A8%ED%84%B4-Observer-pattern
[C#, Unity] 옵저버 패턴 (Observer pattern)
옵저버 패턴이 무엇인가
velog.io
옵저버 패턴이란 어떤 상태가 바뀌었을 때 그것을 연결된 친구들에게 자동으로 알려주는 기법이다
가령 플레이어의 체력이 바뀌면(주체자 = Subject) 이것을 듣고있던 객체에게(가령 플레이어 체력 UI, 체력 간당할때 빨갛게 나오는 화면 = Observer) 자동으로 알려주는 구조라고 할 수 있다.
따라서 정말 다양한 상황에 사용될 수 있다.
가령 플레이어의 업적 달성, 몬스터 처치시 킬수 증가 등 동시에 여러 시스템이 반응해야 하는 상황에서 유용하다
오늘은 옵저버 패턴을 활용해 플레이어의 체력을 구현해보려고 한다!
PlayerHealth에서는 체력이 변할때(HealthChange)와 체력 경고(HealthWarning)가 일어나는 이벤트를 선언한다.
데미지를 입을 때마다 하트가 한 칸씩 깎이며, 변한 체력의 정수값을 전달하는 HeathChange 이벤트가 호출된다.
또한 하트가 1칸 남았다면 체력 경고 HealthWarning 이벤트가 호출된다.
PlayerHealthUI에서 받은 HealthChange 이벤트를 UpdateHealth에 현재 체력값과 함께 전달하여, 체력에 따른 하트 이미지를 표기한다.
마지막으로 PlayerHealthWarning에서 HealthWarning 이벤트를 전달받는다.
ShowWarning 함수를 통해 빨간 경고창을 보여주고, 코루틴을 통해 깜빡거리게 한다.
중요한 점은 OnEnable()에서 이벤트를 할당받고 OnDisable()에서 이벤트 구독을 해지해야 한다.
왜 굳이 일반적인 void() 함수를 사용하지 않을까?
이는 OnEnable(), OnDisable()가 활성화 될 때, 그리고 비활성화 될 때마다 호출되는 함수이기 때문이다.
+=로 이벤트 구독을 아무데서나 하면 중복 실행돼서 오류가 발생할 확률이 높다.
void Start()
{
someEvent += DoSomething;
}
만약 이렇게 선언했다면 해당 오브젝트가 키거나 꺼질때마다 여러번 할당될 것이다.
요로코롬 붉은 이미지를 넣어주고 효과음도 넣어주고
스페이스바로 인위적으로 체력을 깎아보았다.
원하는 대로 결과물이 나오니 뿌듯하다
'Unity' 카테고리의 다른 글
[Unity] 코드: 안티데시스 보스전 리빌드하기 / 1주차 (0) | 2025.05.15 |
---|---|
[Unity] 버전 컨트롤 좌석수 줄이는 법 (1) | 2024.02.10 |
[Unity] 버전 컨트롤 구독 취소하는 법 (1) | 2024.01.18 |
[Unity] 패널값 조정으로 글자 깜빡깜빡 (0) | 2024.01.12 |
[Unity] Plastic SCM(Version Control) 해제법 (0) | 2023.11.25 |