[VR] GroundZero 개발

[4Idle - Gazzlers] 1차 점검

meltingmelvin 2023. 11. 30. 08:18

 

 

초기 담당 부분 설정

 

 

1차 담당 파트

- 프로젝트 생성 및 에셋 정리, 파트 분배 (1103~1108)

- 아이템 Grab (1109~1112)

- 아이템 Grab 연출 , 아이템 사용(1113)

- 타격 이펙트 생성 및 충돌 지점까지의 레이저빔 오브젝트 생성(1114~1115)

- 왼손 기능 통합 / 타격 시 데미지 텍스트 생성 및 몬스터의 HP Bar 추가(1116~1123)

- Player Data, Gun Data, Enemy Data 생성 및 데이터 1차 연동(1124~1129)

 

 

1. 아이템 그랩 / 사용

 

[4Idle-Gazzlers] 플레이어 왼손 구현 -1. 아이템 그랩/사용

컨트롤러 셋팅 -Gazzlers에서 손은 컨트롤러이다. Controller As hands가 아니라 단순 컨트롤러에서 고정된 모델이며, 그랩과 같은 상호작용을 할 때 애니메이션이 플레이되는 것이다. -따라서 컨트롤러

meltingmelvin.tistory.com

아이템 그랩

Distance Grab Test

-Distance Grab으로 멀리 떨어져 있는 아이템을 LG시 아이템을 잡도록 구현

=> 아이템을 잡는 상태가 되면 Controller의 모델을 변경해주어 손 연출

 

 

아이템 사용

- 아이템을 잡았다면 해당 아이템을 사용할 수 있어야함

=> 이는 왼손의 Hand Trigger를 누른 상태에서 추가로 Index Trigger를 눌렀을 때 실행되도록 구현

-인덱스 트리거를 누르면 아이템은 비활성화되고, 손은 그랩 상태에서 벗어난다. 

-파티클 이펙트와 애니메이션을 사용해 연출하였으며, 이 때 비활성화되어있는 파티클 이펙트를 Grab된 순간에 연출되도록 해야했으므로  GetComponentInChildren<T>(bool includInactive)를 사용해 컴포넌트를 T로 받아 자식을 찾았다.

 

아이템 사용 연출

2. 방패 연출 + 아이템 그랩/사용과의 키 중복처리

-enum으로 왼손의 상태를 관리하여 키 중복을 처리해주었다.

그랩할 때 방패가 생기지않고, 따로 잘 동작하는 결과 확인

 

3. 플레이어 오른손 기능 구현

 

총 발사

- 오른손의 Index Trigger를 누르는 동안 플레이어가 들고있는 총에서 레이저 샷을 정면을 발사한다.

-총구 위치에 레이저 빔 오브젝트를 SetActive(true)/SetActive(false) 할 수 있도록 코루틴 함수를 작성했다.

길이가 일정한 레이저 빔 오브젝트 생성

 

타격 이펙트 생성 및 충돌 시 충돌지점까지의 레이저 빔 길이 조절

-타격 이펙트를 Particle System 을 활용해 생성해주고, Physics.Raycast를 이용하여 충돌 체크 하였다.

-충돌 시에 충돌 지점에 타격 이펙트가 발생하며, 레이저 빔은 충돌 지점까지의 길이로 생성된다.

- 타격 이펙트는 미리 생성해 두었다가, 타격 위치를 받아 SetActive(true)/SetActive(false) 하여 코루틴으로 조절하였다.

-레이저 빔의 길이 조절은 ParticleSys.lengthScale을 타격 될때마다의 거리를 넣어주어 조절하였다.

-플레이어가 타고있는 탈것(Vehicle)에는 타격되더라도 이펙트가 나오지 않도록 gameObject.CompareTag를 사용해  코드를 수정하였다.

타격 이펙트 생성 및 충돌지점까지의 레이저 빔 오브젝트 생성

타격 시 데미지 텍스트 생성 및 몬스터의 HP Bar 추가

-RightHandController에서 적을 Hit한 것을 대리자를 호출하여 타격 될 때 데미지 텍스트를 띄우도록 구현하였다.

-타격 위치를 매개변수로 전달하여 데미지 텍스트 UI의 위치에 넣어주었다.

고정된 몬스터의 HP Bar, 타격 시 데미지 텍스트 생성

4. Player Data, Gun Data, Enemy Data 생성 및 데이터 1차 연동

 

 

json 생성

-플레이어가 총을 쏠 때 총의 종류에 따라 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으로 변경해주었다.

적 타격시 EnemyHp와 GunData 연동 결과