[골드메탈 BE4] 따라하기 11

배근철·2022년 8월 11일
0

GoldMetal BE4

목록 보기
11/11

✍ 보스구현

보스 스프라이트 생성

  • 보스 스프라이트를 생성하고, 애니메이션을 만들어서 트랜잭션을 연결해준다.
  • 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으로 비워두자 -> 안그러면 스프라이트가 남음

출처 - https://www.youtube.com/c/GoldMetal

0개의 댓글