Unity 개발일지/[Unity2D]졸업프로젝트

[Unity2D] 9. 공격받았을 때 피격 효과 적용(넉백, 무적모드)

knhoo 2024. 1. 30. 01:56
728x90

2023.11. 29 피격 효과 적용

 

이번에는 플레이어가 적에게 공격 받았을 때

1. 플레이어 스프라이트 색상 및 투명도 변경

2. 넉백 

두가지 기능을 추가하였다.

 

 

기존의 Player 스크립트에 코드를 추가해주었다.

 

void OnCollisionEnter2D(Collision2D collision) //적과 충돌하였을 때
    {
        //충돌한 오브젝트의 태그가 "Enemy"이면
        if(collision.gameObject.tag == "Enemy") 
        {
            OnDamaged(collision.transform.position);
        }
    }
    void OnDamaged(Vector2 targetPos) //적과 충돌시 효과
    {
        //플레이어의 레이어를 playerDamaged로 변경
        gameObject.layer = 10;
        //플레이어 스프라이트 색상을 빨갛게, 투명하게 변경
        spriter.color = new Color(1, 0, 0, 0.4f);  
        
        //넉백코드
        //플레이어가 적보다 왼쪽에 있으면 dir == -1, 왼쪽으로 넉백
        //플레이어가 적보다 오른쪽에 있으면 dir == 1, 오른쪽으로 넉백
        int dirc = transform.position.x - targetPos.x > 0 ? 1 : - 1;
        
        //위로 튕김
        Vector2 jumpVelocity = Vector2.up * 4f;
        rigid.AddForce(jumpVelocity, ForceMode2D.Impulse);
        //좌우로 튕김
        rigid.AddForce(new Vector2(dirc, 1)*5, ForceMode2D.Impulse);
        
        //3초뒤에 "OffDamaged"가 실행된다.
        Invoke("OffDamaged", 3);
    }
    void OffDamaged()
    {
        //스프라이트의 색상과 투명도를 원래대로
        spriter.color = new Color(1, 1, 1, 1);
        //플레이어의 레이어를 원래대로
        gameObject.layer = 9;
    }

 

적 오브젝트의 태그와 레이어는 "Enemy"로 설정해준다.

 

플레이어의 레이어는 "Player"

피격받았을 때의 레이어는  "PlayerDamaged"가 된다

 

[Edit] - [Project Settings] - [Physics 2D]

에서 레이어 간의 충돌을 설정해준다.

"PlayerDamaged"와 "Enemy"가 겹치는 부분의

체크박스를 풀어주면 두 레이어간의 충돌이 무시된다.

 

Invoke()함수를 통해 원하는 시간동안 

적을 통과하는 무적 모드를 설정해줄 수 있다.

 

만약 이렇게 설정해도 충돌이 적용된다면..

적 오브젝트의 콜라이더 설정에서

Layer Overrides -> Exclude Layers에서

충돌을 제외할 레이어를 추가해 줄 수도 있다.

 


문제 사항

 

근데 현재 프로젝트에서는 적 프리펩에 달려있는

자식 오브젝트의 문제인지 

아무리 해도 충돌 판정 무시가 되지 않아서 

며칠째 연구중이다 ㅜㅜ

 


결과 화면

 


참고 영상 : https://youtu.be/epZFE5Hpbdc?feature=shared

 

728x90