본문 바로가기

기타/패스트캠퍼스 Unity

유니티 입문 패스트캠퍼스 챌린지 30일차

 비교적 간단할것 같던 데미지 수치의 표시를 하는 과정이 꽤 복잡한편이었다. 데미지 숫자를 계속 보여줄게 아니기때문에 State를 관리해서 시간이지나면 사라지게 만들어야하고 사라질때 서서히 흐려지며 사라지도록 애니메이션 효과가 필요했다.

 

총알 데미지를 화면에 표시하기

데미지 UI 클래스

- UIDamage 스크립트 생성

- using UnityEngine.UI 추가

- SerializeField로 Text damageText 변수 추가

- 상태 열거형 정의 None/SizeUp/Display/FadeOut

- ShowDamage 메소드

- Reset 메소드

- UpdateDamage 메소드

- string FilePath 프로퍼티

 

데미지 오브젝트 만들기

- Text UI를 추가해서 DamageText 라고 이름 변경

- 상하 좌우 모두 중앙 정렬

- 칼라 조정 : 붉은 색

- UIDamage 스크립트 어태치

- 프리팹으로 저장

 

데미지 오브젝트도 앞서 다른 오브젝트가 그랬던것처럼 생성과 삭제가 매우 반복이되기때문에 캐싱 시스템을 만든다.

앞에서 했던 작업과 동일한 작업을 적용한다고 볼 수 있다.

 

데미지 매니저 제작 (1)

- SystemManager에 DamageCacheSystem 추가

- DamageManager 스크립트 생성

- DamageManager에서 EffectManager와 유사하게 데미지를 로드해서 DamageCacheSystem을 사용

- SystemManager에 DamageManager의 참조 변수로 추가

 

데미지 매니저 제작 (2)

- UIDamage 클래스에서 상태가 None 으로 변할 때 DamageManager 에서 제거

- 게임 오브젝트를 생성해서 DamageManager 어태치

- SystemManager의 DamageManager 변수에 링크

 

데미지 매니저 제작 (3)

- PrefabCacheSystem의 GenerateCache 인자를 부모 Transform을 받을 수 있도록 확장하고 Instantiate 호출 시 같이 전달

- DamageManager에 Canvas의 Transform을 링크할 변수를 추가하고 GenerateCache를 호출할 때 인자로 전달

 

 

UI 데미지 생성 호출

- Enemy 클래스에 DecreaseHP를 오버라이드 하고 데미지 생성을 호출

- Player 클래스에 오버라이드 된 DecreaseHP에서 데미지 생성을 호출

 

3D 위치를 화면 위치로 계산하는 방법

- Camera.main.WorldToScreenPoint

- DamageManager의 Generate 메소드에서 데미지 UI의 위치 값을 넣어줄 때 WorldToScreenPoint로 변환해서 넘겨 줘야 정상적으로 출력

 

데미지 숫자가 나타나는 위치의 계산도 생각외로 복잡한 부분이 있다.

 

데미지 출력 잔여 처리

- Player와 Enemy 데미지 구분

- 데미지 위치의 보다 정확한 표현을 위해 데미지 발생시 위치값도 같이 전달

 

폭발 이펙트와 함께 데미지가 표시되는 모습

https://fastcampus.co.kr/dev_online_game

 

C#과 유니티로 배우는 게임 개발 올인원 패키지 Online. | 패스트캠퍼스

현직 게임업계 게임 개발자 직강 C# 프로그래밍부터 게임 물리와 수학까지 모두 정복!

fastcampus.co.kr

https://bit.ly/3FVdhDa

 

수강료 100% 환급 챌린지 | 패스트캠퍼스

딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

fastcampus.co.kr

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.