본문 바로가기

유니티 2D 기본(Platformer Game)

6. 플레이어 피격 이벤트 구현

Layer 활용을 위해 새로운 타일맵 생성

 - 타일맵은 각각 한개의 Layer만 적용가능하기때문

Platform 타일맵

Layer와 Tag 적용

 

Spikes 타일맵

 

Layer와 Tag 적용

 

Spikes 타일맵에 팔레트를 이용해 함정(가시) 배치

 

몬스터도 Enemy로 적용

Layer와 Tag 적용

게임에서 Enemy끼리는 보통 물리 충돌하지 않기때문에, 서로 물리 영향을 안받도록 설정합니다.

Edit -> Project Settings -> Physics2D 하단 역피라미드 모형에서 조건에 맞춰 체크해제

 

이제 Enemy Layer끼리는 물리 충돌이 일어나지 않습니다.

 

다음으로 플레이어 피격 이벤트를 구현합니다.

보통 플레이어 피격 시 일정시간 무적이기 때문에 Layer를 "Player"과 "PlayerDamaged" 두개로 만듭니다.

 

또한 무적시간 동안 Enemy와 물리충돌이 일어나면 안되기에 물리충돌 또한 꺼줍니다.

 

이제 코드만 작성하면 됩니다.

스크립트(PlayerMove)

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Enemy") { 
            onDamaged(collision.transform.position); //Enemy와 충돌시 Enemy의 위치 정보 매개변수로 주기
        }
    }

    void onDamaged(Vector2 targetPos) {
        gameObject.layer = 8; //플레이어의 Layer 변경

        spriteRenderer.color = new Color(1, 1, 1, 0.4f); //피격당했을 때 색 변경
        int dir = transform.position.x - targetPos.x > 0 ? 1 : -1; //피격시 튕겨나가는 방향 결정
        rigid.AddForce(new Vector2(dir, 1) * 7, ForceMode2D.Impulse); //튕겨나가기

        anim.SetTrigger("doDamaged"); //애니메이션 트리거
        Invoke("offDamaged", 1); //1초 후 무적 시간 끝
    }

    void offDamaged() {
        gameObject.layer = 7; //Layer 변경
        spriteRenderer.color = new Color(1, 1, 1, 1f); //색 변경
    }

 

결과

 

'유니티 2D 기본(Platformer Game)' 카테고리의 다른 글

8. 아이템 먹기  (0) 2021.12.03
7. 몬스터 밟아서 잡기  (0) 2021.12.03
5. 몬스터 AI 구현하기  (0) 2021.11.30
4. TileMap으로 플랫폼 만들기  (0) 2021.11.26
4. 플레이어 점프 구현 & Raycast  (0) 2021.11.26