초기 담당 부분 설정
- 프로젝트 생성 및 에셋 정리, 파트 분배 (1103~1108)
- 아이템 Grab (1109~1112)
- 아이템 Grab 연출 , 아이템 사용(1113)
- 타격 이펙트 생성 및 충돌 지점까지의 레이저빔 오브젝트 생성(1114~1115)
- 왼손 기능 통합 / 타격 시 데미지 텍스트 생성 및 몬스터의 HP Bar 추가(1116~1123)
- Player Data, Gun Data, Enemy Data 생성 및 데이터 1차 연동(1124~1129)
1. 아이템 그랩 / 사용
아이템 그랩
-Distance Grab으로 멀리 떨어져 있는 아이템을 LG시 아이템을 잡도록 구현
=> 아이템을 잡는 상태가 되면 Controller의 모델을 변경해주어 손 연출
아이템 사용
- 아이템을 잡았다면 해당 아이템을 사용할 수 있어야함
=> 이는 왼손의 Hand Trigger를 누른 상태에서 추가로 Index Trigger를 눌렀을 때 실행되도록 구현
-인덱스 트리거를 누르면 아이템은 비활성화되고, 손은 그랩 상태에서 벗어난다.
-파티클 이펙트와 애니메이션을 사용해 연출하였으며, 이 때 비활성화되어있는 파티클 이펙트를 Grab된 순간에 연출되도록 해야했으므로 GetComponentInChildren<T>(bool includInactive)를 사용해 컴포넌트를 T로 받아 자식을 찾았다.
-enum으로 왼손의 상태를 관리하여 키 중복을 처리해주었다.
총 발사
- 오른손의 Index Trigger를 누르는 동안 플레이어가 들고있는 총에서 레이저 샷을 정면을 발사한다.
-총구 위치에 레이저 빔 오브젝트를 SetActive(true)/SetActive(false) 할 수 있도록 코루틴 함수를 작성했다.
타격 이펙트 생성 및 충돌 시 충돌지점까지의 레이저 빔 길이 조절
-타격 이펙트를 Particle System 을 활용해 생성해주고, Physics.Raycast를 이용하여 충돌 체크 하였다.
-충돌 시에 충돌 지점에 타격 이펙트가 발생하며, 레이저 빔은 충돌 지점까지의 길이로 생성된다.
- 타격 이펙트는 미리 생성해 두었다가, 타격 위치를 받아 SetActive(true)/SetActive(false) 하여 코루틴으로 조절하였다.
-레이저 빔의 길이 조절은 ParticleSys.lengthScale을 타격 될때마다의 거리를 넣어주어 조절하였다.
-플레이어가 타고있는 탈것(Vehicle)에는 타격되더라도 이펙트가 나오지 않도록 gameObject.CompareTag를 사용해 코드를 수정하였다.
타격 시 데미지 텍스트 생성 및 몬스터의 HP Bar 추가
-RightHandController에서 적을 Hit한 것을 대리자를 호출하여 타격 될 때 데미지 텍스트를 띄우도록 구현하였다.
-타격 위치를 매개변수로 전달하여 데미지 텍스트 UI의 위치에 넣어주었다.
4. Player Data, Gun Data, Enemy Data 생성 및 데이터 1차 연동
-플레이어가 총을 쏠 때 총의 종류에 따라 Damage Text가 띄우게 될 타격 데미지가 달라져야했다.
- 생성되는 적의 종류에 따라 다른 HP를 가지고 있으므로 데이터 연동이 필요하였다.
-DataManager.cs를 생성하여 데이터를 관리하도록 하였다.
-GameMain에서 EnemyGenerator.cs의 enemy를 생성 함수를 호출하도록하였다.
- 몬스터는 각각의 HPBar가 존재해야하므로 오브젝트 풀링으로 미리 생성해두었다가 사용하도록 하였다.
-총을 쏠 때, Hit한 오브젝트가 무엇인지 GameMain에 전달되도록 RightHandController를 수정하였다.
-매개변수를 통해 hit된 게임 오브젝트를 전달한다.
=> 오브젝트를 enemyList의 몬스터들과 비교해 같은 개체인 경우에 HP를 감소시킨다.
-처음에 HP를 감소시킬 때 예상한 것보다 큰 값이 감소되는 문제를 발견했다.
-로그를 찍어보니 Input이 여러개 발생하는 것을 확인해 OVRInput.Get이 아니라 OVRInput.GetDown을 사용하도록 코드를 변경해주었다.
=> 그 동안에는 동시에 여러번 호출되어도 동시에 껐다켰다하느 메서드들만 존재했기 때문에 문제가 발생한 것을 모르고 있었던 것이었다.
-데미지 텍스트의 값은 TextMeshProUGUI 컴포넌트를 가져와 text값을 string.Format으로 변경해주었다.
'[VR] GroundZero 개발' 카테고리의 다른 글
[4Idle - Gazzlers] 손에 탄창 충전 기능 추가 (1) | 2023.12.05 |
---|---|
[4Idle - Gazzlers] Player 이동 기능 + 손 기능 합치기 (0) | 2023.12.01 |
[4Idle - Gazzlers] Player Data, Gun Data, Enemy Data 정리 1 (0) | 2023.11.27 |
[4Idle - Gazzlers] 플레이어 오른손 기능 구현(총 쏘기+ 데미지 텍스트 효과) (1) | 2023.11.21 |
[4Idle-Gazzlers] 플레이어 왼손 구현 -2. 방패 부착 (1) | 2023.11.14 |