유니티 3D 쿼터뷰 액션게임 만들기
👾 수류탄 구현하기 👾
1. 오브젝트 생성
- Prefab Weapon Grenade 수류탄 가져오기
- 미리 준비된 파티클 Prefab을 자식 오브젝트로 등록
- 던지고 굴러야하므로 Rigidbody와 Collider추가
- 물리재질 Physics Material 생성하여 해당 Collider에 추가 (설정값 : 1,1,1)
- Mesh object (자식오브젝트)에 잔상을 주기위한 Trail Renderer 추가
- 수류탄이 Player와 부딪히지 않게 Layer 설정 (PlayerBullet)
- 만든 수류탄을 Asset창에 드래그하여 Prefab으로 저장
📣 모든 오브젝트는 (0,0,0)로 초기화 !!
2. 수류탄 투척
🔻 Player 로직에 수류탄 Prefab을 저장할 변수 추가
public GameObject grenadeObj;
- Fire2 button : 마우스 오른쪽버튼 클릭
- 수류탄 전용 Input과 함께 함수 생성
bool gDown
void GetInput()
{
gDown = Input.GetButtonDown("Fire2");
}
void Update()
{
Grenade();
}
void Grenade()
{
//수류탄을 쓰기 이전에 제한 조건들을 작성
}
- 수류탄 투척을 쓸 수 없는 제한 조건 : hasGrenades 가지고 있는 수류탄 개수가 0일 때
- 마우스 클릭을 한 곳에 수류탄을 던질 수 있도록 RayCast사용
- Instantiate()함수로 수류탄 생성 (인스턴스화)
- 완성된 수류탄의 Rigidbody를 활용하여 던지는 로직 구현 (AddForce(), AddTorque())
- 수류탄 하나 던지는 로직 후 hasGrenades 개수를 하나 빼줌
- Player 주변에 맴돌고 있는 수류탄도 하나 비활성화함
🔻 수류탄 Prefab에서 파티클 오브젝트는 미리 비활성화 하기
3. 수류탄 폭발
✏️ 수류탄 폭발시키는 스크립트 생성
🔻 각 자식 오브젝트와 Rigidbody를 담을 변수 추가 (meshObj, effectOfj)
🔻 Throw Grenade Prefab에 해당 스크립트 추가하고 변수 초기화
✏️ 시간차 폭발 스크립트
- 시간차 폭발을 위해 코루틴 선언 IEnumerator ()
- 3초 후에 실행, 폭발할 때 수류탄이 굴러가는 물리적 속도를 모두 Vector3.zero로 초기화
- 수류탄 Mesh는 비활성화, 폭발은 활성화
📌 velocity : rigidbody의 속도를 나타냅니다
📌 AngularVelocity : 물리 회전 속도
📌 SetActive() : 오브젝트 활성화 함수
4. 수류탄 피격
수류탄이 폭파했을 때, 주변에 있던 적들이 데미지를 입는 로직
특정 범위에 걸린 적 검출하기
공모양의 부피가 있는 Raycast
RaycastHit에 걸린 오브젝트를 모두 가져와야하므로 배열 사용
Physics.SphereCastAll
구체 모양의 레이캐스팅, 범위에 걸린 모든 적들을 가져와야함
(위치 , 반지름 , Ray를 쏘는 방향 , Ray를 쏘는 길이, Layermask)
Layermask.GetMask("")
레이어 이름 목록
foreach 문으로 수류탄 범위에 있는 적들의 피격함수를 호출
foreach (데이터형식 변수명 in 배열) {}
rayHits안에 있는 hitObj를 하나씩 가지고 오면서 호출
수류탄은 파티클이 사라지는 시간을 고려하여 길게 Destroy()호출
📌 Enemy 로직
✏️ Enemy가 수류탄에 의해 공격받았을 때 체력 & 넉백 죽기 전 리액션
🔻 Enemy가 수류탄에 의해 공격받았을 때의 체력 및 위치
-수류탄만의 큰 리액션을 위해 넉백로직에 bool 매개변수 추가 (isGrenade)
-수류탄은 true, 나머지는 false
✏️ 수류탄에 의해 죽을 때 Enemy가 공중회전하면서 죽도록 함
-수류탄에 의한 사망 리액션은 큰 힘과 회전을 추가시킴
-Freeze Rotation x,z축이 고정되어 있으므로 해제시킴
-죽기 전에 AddForce, AddTorque 실행됨
'유니티' 카테고리의 다른 글
유니티 3D 쿼터뷰 액션게임 만들기 - 돌격형, 원거리형 몬스터 / 공격 데미지 (0) | 2022.04.25 |
---|---|
유니티 3D 쿼터뷰 액션게임 - 목표를 추적하는 내비게이션 AI / NavMeshAgent (0) | 2022.04.25 |
유니티 3D 쿼터뷰 액션게임 - 피격 테스터 만들기 (0) | 2022.04.24 |
유니티 3D 쿼터뷰 액션게임 - Player 물리문제 고치기 / 벽 관통 방지 / 아이템 고정 (0) | 2022.04.23 |
유니티 3D 쿼터뷰 액션게임 - 원거리 공격 구현 / Instantiate() / Raycast / 마우스 방향으로 회전 (0) | 2022.04.23 |