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