유니티 보스 패턴 - yuniti boseu paeteon

//출처는 골드메탈님 강의입니다!
//단어 : taunt - 도발

To do List

  1. 애니메이션
  2. 리지드바디, 컬라이더, nav 세팅
  3. 귀 쪽에서 미사일을 발사할 것이므로 gameobject 2개 자식으로 생성.
  4. 점프했다가 밑으로 수직낙하하는 공격을 만들것이므로 발부분에 충돌체를 하나 만들자.
  5. 미사일 프리팹 만들자. 해당 미사일은 유도미사일이다!
    그렇기 때문에 미사일에 nav 컴포넌트를 추가하자.
  6. 코드 작업 : 기존 Bullet을 상속받아서 사용할것이다.
    보스 미사일이라고 스크립트를 하나 만들자.
  7. 미사일 스크립트에서는 타겟잡은 벡터를 추적하는 기능을 구현하자.
  8. 바위 만들자. 리지드 바디, 컬라이더를 추가하자.

보스 기본 세팅

  • 애니메이션

    유니티 보스 패턴 - yuniti boseu paeteon

    Big shot과 Shot과 Taunt 에서 Exit로 향할때는
    밑의 그림처럼 Has Exit을 체크하고, Duration을 0.1로 설정하자.

    Any State에서 Die, Big Shot, Shot, Taunt로 향할때는 아래의 그림처럼.

  • 다른 적과 같이 리지드바디, 콜라이더, 내비에이전트를 추가하자.

    • 점프해서 내려찍기? 할때만 회전할 것이므로
      Angular Speed를 0으로 설정했다.
  • 양쪽에서 미사일을 발사할 것이다.

  • 점프 공격 패턴을 위한 공격 범위 오브젝트를 생성하자. + 콜라이더는 비활성화까지

투사체 만들기

  • 미사일 만들기
    Missile Bos를 하이라키창에 드래그 드롭하자.
    설정하기

  • 파티클 나오는 위치를 꽁다리에 맞도록 설정하자.
    꽁다리는 노란색 부분이다.

  • 파티클 분출구를 회전시키자.

  • 퍼져나가는 폭을 줄이자.

  • radius를 0.5로 변경하자.
  • 파티클 컬러 설정
    : 여러가지 색으로 혼합할수 있다!
    알파값을 100으로 해 선명하게 만들어주자.

    • 이런식으로도 만들 수 있다.
      유니티 보스 패턴 - yuniti boseu paeteon
  • 사이즈 설정 및 world로

    world로 해야 회전할때 같이 회전한다?

  • 방출량 설정하자.

    유니티 보스 패턴 - yuniti boseu paeteon

  • 미사일 본체에 컴포넌트 추가하자.
    이 미사일은 보시다시피 유도미사일!!이다!!

  • nav 추가하자.

  • 유도대상을 선정하기 위해 스크립트 Bullet을 추가하자.
    근데 기존에 만들어진 Bullet 함수에다가 코드를 보완하면 기존에 Bullet을 컴포넌트로 한 오브젝트들에
    문제가 있을 수 있다.
    -> 기존의 기능에 새로운 기능을 넣자
    => 상속을 사용하자.

  • BossMissile 스크립트를 컴포넌트로 추가하자.

투사체 바위 만들기

-바위 오브젝트에 리지드바디와 콜라이더를 추가하자.
x축으로만 회전할것이고, 회전저항 없게 만들거임.
무게는 10으로,

sphere collider도 추가함.

유니티 보스 패턴 - yuniti boseu paeteon

미사일처럼 바위 스크립트도 생성하여 추가함.
BossRock 코드 작성 -> 실행해보면 바위가 점점 커지면서 사라지는 문제가 있다.
그 이유는 상속된 Bullet의 파괴로직 때문이다.

flag 변수를 추가해서 우회하도록 하자
Bullet 스크립트 사용하는 오브젝트는 변수 체크 여부에 따라 실행하는 함수 다르다. 기본값은 false


코드 추가 후에는 rock이 wall과 부딫히는 문제 발생한다.
유니티 보스 패턴 - yuniti boseu paeteon

  • 벽에 부딪혔을 때 사라지는 로직은 트리거 동작이다. collider를 새롭게 하나 더 만들자.

    -> 실행하면 wall 충돌시 사라지는 것을 확인할 수 있다.

보스 로직 준비

  • Enemy 스크립트를 상속 받아서 컴포넌트로 추가하자. 그런데 보스에 맞지 않는 동작들도 있다.
    조금 수정하자.

  • 피격시 모든 mesh의 material의 color 값이 변경시키게 하기 위해서
    이전에 했던 내용처럼 mesh배열을 선언해서 for_each문 돌려서 색을 변경시키자.

기본 로직

  • 코드 작성 후, 컴포넌트의 변수 설정까지 하자.

    -> 실행해보면 플레이어가 가는 방향보다 조금 앞서서 시선을 따라간다.
public class Boss : Enemy
{
    //미사일 관련 변수를 만들자. 
    public GameObject missile;
    public Transform missilePortA;
    public Transform missilePortB;
    //돌을 저장할 변수는 따로 만들지 말자. 
    //Enemy 스크립트에 있는 bullet 오브젝트를 사용하자. 

    //플레이어 움직임 예측 벡터 변수 생성함.
    Vector3 lookVec;

    //점프해서 내려찍을 때 어느 곳에 taunt(도발)할지 정하는 포인트 필요하다.
    Vector3 tauntVec;

    //플레이어 바라보는 플래그 변수를 추가함. 
    bool isLook;

    void Start()
    {
        isLook = true;
    }

    void Update()
    {
        //플레이어를 계속 바라보게 함.
        if(isLook)
        {
            //플레이어의 움직임을 예측하기 위해서 플레이어의 입력값을 사용함.
            float h = Input.GetAxisRaw("Horizontal");
            float v = Input.GetAxisRaw("Vertical");
            //플레이어 입력값으로 예측 벡터값을 만듬 5를 더 가함.
            lookVec = new Vector3(h, 0, v) * 5f;
            transform.LookAt(target.position + lookVec);

        }
    }
}

패턴 로직

  • enemy에서의 모든 변수들을 public으로 선언함.
  • boss 스크립트에 코드 작성함.
  • 1번째 문제점
    첫발 이후의 후속 미사일들이 Destory되지 않는 문제가 있다.
    유니티 보스 패턴 - yuniti boseu paeteon

코드 상에서 플레이어가 피격시 1초 간격 무적 조건 안에서 코드를 작성 했기 때문이다.

그래서 if 문 바깥으로 뺏다!

  • 2번째 문제점.
    보스가 플레이어에게 쿵!!! 하면 충돌에 의해 플레이어가 날라가는 문제가 생긴다.
    유니티 보스 패턴 - yuniti boseu paeteon

=> 완료!!

플레이어 뒤로 벽이 있고, 보스가 쿵! 할 경우 플레이어가 날라가는 문제가 있다.