Layer 활용을 위해 새로운 타일맵 생성
- 타일맵은 각각 한개의 Layer만 적용가능하기때문
Platform 타일맵
Spikes 타일맵
Spikes 타일맵에 팔레트를 이용해 함정(가시) 배치
몬스터도 Enemy로 적용
게임에서 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 |