주녘공부일지

[ShootingGame] 11. 탄막을 뿜어대는 보스 만들기 본문

GameDevelopment/[Unity] Lecture

[ShootingGame] 11. 탄막을 뿜어대는 보스 만들기

주녘 2022. 2. 7. 20:49
난이도를 너무 어렵게 세팅한 것 같다.

Scripts.zip
0.01MB

 

 

0. 준비하기

보스 몹과 보스 몹이 사용할 추가 총알 세팅 + 애니메이션

 

- 보스몹의 피격상태는 애니메이션으로 관리할 예정 // 트리거 매개변수 OnHit

- 돌아가는 트랜지션의 Has Exit Time 체크 // 컨디션이 따로 없기 때문

Any State : 언제나 실행되는 애니메이션

 

 

1. 총알, 적 보스 프리팹

class Bullet 로직 추가 // 회전하는 총알
class Enemy를 재활용하여 보스에 대한 로직 작성

적 기체가 Boss 일 경우

- Awake() : 애니메이션을 가져옴

- OnHit() : 애니메이션의 트리거 매개변수 OnHit 활성화 + 아이템을 드롭하지 않음

- OnEnable() : 보스체력세팅 + 지정된 위치에서 이동x // 2번

- Update() : 보스의 공격패턴은 따로 만들 것이므로 함수호출x

- OnTriggerEnter2D() : BorderBullet 태그에 부딪혀도 파괴되지 않음

 

+ 보스 총알 프리팹과 보스몹을 오브젝트 풀링에 등록 // GameManager의 enemyObjs도 추가

 

 

2. 패턴 흐름

class Enemy / 적 보스 프리팹 인스펙터 설정값

패턴 흐름에 필요한 변수 선언

- patternIndex : 패턴 종류를 index로 가지는 변수

- curPatternCount : 현재 실행되고있는 패턴의 실행 횟수

- maxPatternCount : 패턴의 최대 실행 횟수 // 배열로 4개의 패턴 관리

 

+ Element 2 : 홀수로 설정해 플레이어의 이동 유발 // 3번

 

class Enemy

Stop() : 이동을 멈추는 함수

- 생성할때 호출되기 때문에, 비활성화상태에선 작동하지 않음

- 활성화 상태에서 호출 시, 이동을 멈춤 // 속력 = 0

- 이동을 멈춘 후 패턴을 실행시킬 Think() 호출

 

Think() : 패턴을 실행시킬 함수

- 패턴인덱스가 갯수를 넘기지 않게 0으로 돌아오는 로직을 작성 // 순서대로 호출됨

- 스위치문을 통해 각 패턴을 실행

 

 

3. 패턴 구현

1) Class Enemy - FireFoward() : 일직선 4발

 

- 패턴 카운팅 : 현재 패턴 실행 횟수가 최대 패턴실행 횟수보다 작으면 패턴을 다시 실행하고 아니면 다른 패턴을 호출시킬 Think() 호출 // 2,3,4번에도 똑같은 로직

 

 

2) Class Enemy - FireShot() : 플레이어를 향해 샷건 (5발)

 

- ranVec를 이용해 랜덤값을 설정하고 기존 방향에 더하여 범위 내에서의 랜덤한 샷건 구현

 

 

3) Class Enemy - FireArc() : 부채꼴 모양

 

- dirVec에 최댓값에 1부터 시작하는 현재 카운트 값을 나누어 쏘는 방향을 이동시킴

- 부드럽게 쏘기 위하여 원주율을 곱하고, 상수를 곱해 방향 이동 속도 조절

 

+ 당연히 상수를 곱하지 않을 시엔 1에서 -1까지의 값을 한번씩 반환하게 됨

 

 

4) Class Enemy - FireAround() : 원 형태로 전체 공격

 

- roundNum에 짝수일땐 roundNumA, 홀수일땐 roundNumB 값을 저장

- dirVec의 x값에 cos, y값에 sin을 넣어 원의 형태로 발사 

 

- 총알 갯수를 원주율 * 2 (원의 둘레) * for문 index를 나눔

- rotVec에 총알 갯수를 정면을 기준(forward)으로 360도 * for문 index로 나눈 값을 저장하고 Rotate()으로 발사하는 방향으로 회전시킴

// 원을 총알 갯수로 일정하게 자른 방향

 

 

Mathf.Cos() : 삼각함수 cos으로 각도에 따른 cos 값( -1 ~ 1 사이의 값)을 반환 // Mathf.Pi() : 원주율 값

https://docs.unity3d.com/kr/530/ScriptReference/Mathf.html

 

Unity - 스크립팅 API: Mathf

Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. 닫기

docs.unity3d.com

 

https://github.com/godgjwnsgur7/ShootingGame

 

GitHub - godgjwnsgur7/ShootingGame

Contribute to godgjwnsgur7/ShootingGame development by creating an account on GitHub.

github.com

 

강의 출처

https://www.youtube.com/watch?v=dnMVMBVpgYA&list=PLO-mt5Iu5TeYtWvM9eN-xnwRbyUAMWd3b&index=11