본문 바로가기

Unity/Unity3D_Quater

Unity3D_Quater - 캐릭터 폭탄투척, 폭탄 이펙트, 적 폭탄피격 구현

수류탄 투척

1. 투척할 수튜탄 오브젝트 생성 후 프리팹화
  1)수류탄 오브젝트 인스펙터 
   : 수류탄자체는 중력의 영향을 받으며 충돌이 가능하고, 마찰력과 탄성력을 높혀주어 활동성을 높이고, 날라갈때 이펙트를 줄것, 그리고 폭팔하면서 폭팔이펙트,
  - 컴포넌트 : 리지드바디, 구콜라이더, 트레일랜더러, 피지컬메테리얼즈
 
 2)수류탄 스크립트 
 : 2에서 플레이어가 던진 수류탄은 2의 힘에 의해 굴러가다가 멈출것임(폭탄속력0, 회전속력 0)
 : 멈춘 폭탄은 몇초 후 터지면서(코루틴,폭탄이펙트(트레일랜더러)활성화, 폭탄메쉬는 비활성화) 폭발범위안의 적들을 찾음(shapeCastAll)


 : 그렇게 찾은 rayCastHit 오브젝트들을 배열에 담아서 해당 오브젝트들이 모두(foreach활용)넉백하고 데미지를 입음     Enemy스크립트와 연동
  - 변수 : 수류탄 데미지, 트레일랜더러, 

2.플레이어가 수류탄 투척
 :  수류탄은 플레이어 위치에서 생성(폭탄프리팹 instate)되어, 마우스 우측 클릭한 지점(fire2)을 향하여(dirvec = 우클릭지점 - 플레이어위치) 폭탄을 던질 것(리지드바디포스)

 

 

 

1. 폭탄 오브젝트 만들기

- Mesh Object에 TrailRenderer 추가

- 폭탄이펙트는 기본적으로 비활성화(프리팹생성시 자동으로 터지기 때문에)

- Layer를 BulletCase로 해주어야 폭탄프리팹 생성시에 캐릭터와 충돌이 일어나지 않음

 

2. 플레이어 스크립트

 

 

3. 폭탄 스크립트

*일정 폭발 범위 내의 오브젝트 정보를 가져오는 법 - > physics.SphereCastAll()

참조 : wergia.tistory.com/102

 

4. 폭탄에 맞아서 폭탄피격 범위 안에서 스캔된 enemy 스크립트

 

 - 폭탄에 맞았을때 적 오브젝트의 피격이펙트를 일반무기에 맞았을때와  다르게 준다

 - 더 멀리 높이 날라가고 회전까지 추가함

 

 - 폭탄 던지면 갯수 차감하기

 

 

 

*문제 발생

 - 폭탄을 1개 먹으면 한번씩 폭탄갯수가 2개가 증가 되는 버그 발생 

*원인

 - 폭탄을 먹을때 발생하는 onTriggerEnter() 함수가 2번 실행됨 - > 캐릭터 콜라이더와 , 캐릭터 장비장착오브젝트 콜라이더 2개가 동시에 폭탄 콜라이더와 충돌할때 버그 발생 

*문제 해결

 - 캐릭터 장비장착오브젝트 콜라이더를 비활성화 시켜서 캐릭터 콜라이더 1개만 남김