- 개요
Room에 있는 다른 플레이어들을 대상으로 사격하여 피격되면 데미지를 입고
데미지가 어느정도 쌓이면 피격된 플레이어가 쓰러지도록 구성한다
- 애셋 작업
1) Animator 애셋

피격 애니메이션과 죽음 애니메이션을 추가하고 두 애니메이션으로 전환하기 위한 Bool 파라미터를 추가한다
1) 기본 애니메이션과 피격 애니메이션의 트랜지션

피격 애니메이션에서 기본 애니메이션으로 전환하는 경우는 피격 애니메이션이 종료되면 전환한다
기본 애니메이션에서 피격 애니메이션으로 전환하는 경우는 파라미터를 사용하여 전환한다
조건은 위와 같이 Hit 파라미터가 True인 경우에만 전환한다
2) 기본 애니메이션과 죽음 애니메이션의 트랜지션

Dead 파라미터가 True인 경우에 기본 애니메이션에서 죽음 애니메이션으로 전환한다

Dead 파라미터가 False인 경우에 죽음 애니메이션에서 기본 애니메이션으로 전환한다
- 스크립트 작업
1) DisplayColor 클래스

Update 함수를 추가하고 위와 같이 로직을 구성한다
Animator 컴포넌트로부터 Hit 파라미터를 읽어와 True라면 Recover 코루틴 함수를 호출한다

Recover 코루틴 함수의 로직은 위와 같다
0.03초 후에 Hit 파라미터를 False로 설정하여 피격 애니메이션을 중단하고 기본 애니메이션으로 전환한다

DeliverDamage 함수를 추가한다
방에 있는 다른 모든 플레이어들과 다음에 들어올 플레이어들이 TakeDamage RPC 함수를 호출하도록 설정한다

TakeDamage RPC 함수의 로직은 위와 같다
피격된 플레이어의 체력바 UI를 확인하여 다음의 로직을 수행한다
- 체력이 남아있는 경우 : Animator의 Hit 파라미터를 True로 설정 + 체력 감소
- 체력이 남아있지 않은 경우 : Animator의 Dead 파라미터를 True로 설정 + 키 입력이 동작하지 않도록 설정
2) PlayerFire 클래스

피격과 관련된 멤버변수를 추가한다
- damageAmts 멤버변수 : 무기별 데미지
- shooterName 멤버변수 : 공격한 플레이어의 이름
- targetName 멤버변수 : 피격된 플레이어의 이름
- isDead 멤버변수 : 플레이어가 쓰러졌는지 판단하는 불리언 변수

HandleFire 함수에 위와 같이 로직을 추가한다
우선, 플레이어가 쓰러졌는지 확인하여 쓰러지지 않았다면 로직을 수행한다
- gameObject가 Raycast되지 않도록 레이어를 설정 + 마우스 커서의 방향으로 Ray를 발사
- Raycast 결과를 확인하고 다음의 로직 수행
- targetName 멤버변수의 값을 설정
- Raycast된 대상으로부터 DeliveryDamage 함수 호출
- shooterName 멤버변수의 값을 설정
- 이후 gameObject의 레이어를 다시 복원
3) PlayerMovement 클래스

플레이어가 쓰러졌는지 판단할 불리언 변수를 추가한다

키 입력에 따라 호출하는 콜백 함수들에 플레이어가 쓰러지지 않은 경우의 조건을 추가한다
4) PlayerWeaponChange 스크립트

플레이어가 쓰러졌는지 판단할 불리언 변수를 추가한다

키 입력에 따라 호출하는 콜백 함수에 플레이어가 쓰러지지 않은 경우의 조건을 추가한다
- 최종 실행 결과


'유니티 엔진 - 게임 프로젝트 > Photon을 사용한 멀티 플레이어 게임' 카테고리의 다른 글
| 게임플레이 - 최종) 탄창의 추가와 리스폰, 게임 종료 구현 (0) | 2026.05.05 |
|---|---|
| 게임플레이 - 3) 플레이어 점수 갱신 + 문제 수정 (0) | 2026.05.05 |
| 게임플레이 - 1) 사격 FX 효과 추가 (0) | 2026.04.28 |
| UI 설정 - 최종) Room 퇴장 구현과 Lobby 퇴장 개선 (0) | 2026.04.22 |
| UI 설정 - 6) 점수판 UI (0) | 2026.04.21 |