- 보스 스프라이트를 생성하고, 애니메이션을 만들어서 트랜잭션을 연결해준다.
- Trigger를 이용해 Hit일 때를 구현 AnyState -> Hit -> Idle
- 캡슐콜라이더를 추가하고 Direction을 Horizontal로 변경해서 크기를 맞춰준다.
- 기본 불릿을 복사해서 오픈프리펩을 이용해 알맞게 변경해준다.
- Flip Y를 체크해서 총알이 아래방향을 보도록 설정
- 보스 총알 프리펩을 오브젝트 풀링에 등록하고, bool변수를 활용해 회전하도록 bool값 설정
- 기존 Enemy스크립트를 활용한다.
- 피격을 당했을 때 일반 Enemy는 스프라이트를 변경해줬지만, 보스는 애니메이터의 트리거를 이용해 변경
- if문으로 Boss일 경우 예외를 둬서 만들어준다.
- 보스를 프리펩으로 등록하고 오브젝트 풀링에 등록
- Stage의 4,B,2를 작성해 보스가 가운데로 4초뒤에 나오도록 설정
- 풀링을 사용하는 GameManager에도 보스 로직을 추가해준다.
- OnEnable에서 Boss일 경우 다른 Enemy처럼 아래로 내려오는 로직이 필요없기 때문에
Stop 함수를 생성하고 Invoke로 실행시켜준다.void Stop() { Rigidbody2D rigid = GetComponent<Rigidbody2D>(); rigid.velocity = Vector2.zero; }
- Stop 함수가 두번 사용되지 않도록 조건 추가
if(!gameObject.activeSelf) return;
- 패턴 흐름에 필요한 변수와 각 패턴별로 함수를 생성해, 각 패턴별 횟수를 실행하고
다음 패턴으로 넘어가도록 구현- 각 패턴별 횟수를 실행하고 다음 패턴으로 넘어가도록 구현
if(curPatternCount < maxPatternCount[patternIndex]) Invoke("FireFoward",0.7f); else Invoke("Think", 3);
- 패턴 변경 시 패턴 실행 카운트는 항상 꼭 초기화 해준다.
- 패턴1,2를 구현할 때는 나아가는 방향이 모두 동일하므로 기존로직에 랜덤 벡터를 더하여 구현
- 패턴3는 회전하는 총알이므로, rotation을 Quaternion.identity로 초기화 시켜준다.
- Mathf의 Sin, Cos, PI를 이용해서 총알을 구현함
- PI는 원의절반이므로 원의둘레는 PI*2 -> 둘레값을 많이 줄수록 빠르게 파형을 그린다.
- 총알개수는 홀수로 넣어서 플레이어가 이동을 하도록 유발시킨다.
- 패턴4는 원의형태로 총알을 나가게 하기때문에 PI*2를 이용한다.
- 생성되는 총알의 순번을 활용하여 방향 결정 Index / MaxIndex
- x축과 y축을 서로 sin , cos으로 다르게 설정한다 (어디가 sin이고 어디가 cos인지는 상관없다)
Vector3 rotVec = Vector3.forward * 360 * index / roundNum + Vector3.forward * 90; // 총알이 나가는 쪽으로 바라보게 회전
- +90을 하는 이유 : 원모양상태로 회전하지않고 총알 발사
- +90을하지않으면 원모양으로 회전하면서 총알이 발사된다.
- 패턴 1
- 패턴 2
- 패턴 3
- 패턴 4
- 무적타임 플래그 bool변수를 생성하고 OnEnable을 이용해 bool변수를 true로 설정하고, 알파값을 조정해 투명하게 변경해준다.
- onTrigger에서 무적상태일때는 데미지를 입지않도록 하고, 보조무기는 죽을 때 같이 사라지도록 Player에 넣어준다.
- 스프라이트를 만든 후 , 애니메이션을 만들어주고 애니메이터에서 Trigger를 이용해 표현
- Entry -> Idle(빈 애니메이션)
- Any State -> Explosion -> Idle
- 애니메이션 트리거를 위해 스크립트 작성
- string 배열을 매개변수로 받아 크기에 따라 폭발 크기를 transform.localScale로 설정
- 프리펩으로 만들고, 오브젝트 풀링에 추가 후 GameManager.cs에서 함수생성
- 프리펩의 스프라이트는 None으로 비워두자 -> 안그러면 스프라이트가 남음