호우동의 개발일지

Today :

article thumbnail

구현 목표

마리오 게임처럼 적군을 밟아서 대미지를 주는 것을 구현하려고 한다.

대미지를 주는 것과 동시에 밟았을 때
조금 위로 튕겨 올라가는 효과를 부여하려고 한다.

몬스터를 밟으면 뛰어오르게 할 것
몬스터를 밟으면 뛰어오르게 할 것

그림은 좀 허접하긴 한데, 위의 그림처럼 동작되게 할 것이다.
마리오랑 비슷하다고 생각하면 편하다.

 


구현 과정

HitBox라는 콜라이더를 넣음
머리에 히트박스  추가
새로운 콜라이더를 넣음
새로운 콜라이더를 넣음

우선 위에서 즉, 머리를 밟혔을 때만 대미지를 입게 할 것이기 때문에,
적군 요소 머리에 HitBox라는 새로운 콜라이더를 넣어준다.

크기는 점프해서만 맞출 수 있게끔 잘 조절했다.

HitBox와 다른 콜라이더를 구분하기 위하여 태그를 사용하였다.
새로운 태그 Damagable에 HitBox를 포함시켜 구분 가능하도록 만들어놨다.

새로운 HitBox 게임 오브젝트를 넣음
새로운 HitBox 게임 오브젝트를 넣음

 

private void OnCollisionEnter(Collision collision)
    {
        GameObject obj = collision.gameObject;
        if (obj == null) return;
        //layer == 12 -> Enemy
        if(obj.layer == 12)
        {
            ABoss enemy = obj.GetComponent<ABoss>();
            if (collision.collider.CompareTag("Damagable"))
            {
                enemy.OnDamaged(Vector3.zero);
                rigid.AddForce(Vector3.up * REBOUND, ForceMode.VelocityChange);
            }
            else OnDamaged();
        }
    }

 마지막으로는 코드 부분인데,
내가 개발일지를 처음부터 쓰던 게 아니라서 많은 부분이 생략되어 있다.

이는 플레이어에게 붙어있는 스크립트인데,
플레이어가 enemy layer( layer 12)와 충돌할 때 발생하는 코드들이다.

쉽게 설명하자면,
CompareTag("Damagable")을 통해 충돌한 태그가 Damagable인지 확인한다.

맞으면 ABoss 스크립트에 있던 OnDamaged 함수를 실행하여
적군에게 대미지를 주고 위쪽으로 가속도를 주어 위로 튀어 오르는 효과를 준다.

여기서 REBOUND는 내가 임의로 준 상수값이므로 무시해도 된다.

ForceMode.VelocityChange는 질량값을 무시하고 순간적으로 주는 힘인데,
주로 순간적인 힘을 줄 때 사용된다.

만약 Damagable 태그가 아니라면,
즉 그냥 일반적인 충돌이라면 플레이어가 대미지를 받는다.

 


구현 결과

구현 결과
구현 결과 밟으면 제대로 튀어오르는 것을 확인할 수 있다.

플레이어가 위에서 적을 밟을 때
제대로 적군의 피격 모션이 발동되는 것을 확인할 수 있고,
밟은 직후 바로 튀어 오르는 것을 확인할 수 있다.