본문 바로가기
유니티로 게임만들기

유니티로 2D 게임 만들어 보기 (충돌 #4)

by SajuPlanet 2024. 7. 31.

캐릭터의 움직임을 구현했고, 맵을 꾸몄고 , 구조물도 맵에 올려봤다. 그런데 내 캐릭터가 아무리 유령이라지만 구조물을 통과한다. 그래선 안된다. 구조물에 걸려서 더이상 가지 못하게 만들어야 한다. 그러기 위해선 콜라이더? 를 해야한단다. 

오늘도 챗지피티에게 물어본다. 

 

 

유니티에서 2D 게임을 개발하면서 캐릭터가 구조물과 충돌하지 않도록 하기 위해서는 다음과 같은 단계를 따라야 합니다:

1. Collider 추가

Colliders는 물리적인 경계를 정의하여 객체 간의 충돌을 처리합니다. 캐릭터와 구조물 모두에 Collider를 추가해야 합니다.

  • 캐릭터: Rigidbody2D와 함께 BoxCollider2D, CircleCollider2D 또는 PolygonCollider2D를 사용할 수 있습니다.
  • 구조물: 구조물의 형태에 따라 적절한 Collider를 사용합니다. 예를 들어, 박스 모양의 구조물에는 BoxCollider2D, 원형 구조물에는 CircleCollider2D를 사용할 수 있습니다.

2. Rigidbody2D 추가

캐릭터에 Rigidbody2D 컴포넌트를 추가하여 물리 엔진이 캐릭터의 움직임과 충돌을 계산할 수 있도록 합니다. Rigidbody2D의 Body Type을 Dynamic으로 설정하면 물리법칙에 따라 움직입니다. 만약 구조물에도 Rigidbody2D를 추가해야 한다면, Body Type을 Static으로 설정하세요.

3. Physics Material 2D (선택 사항)

충돌 시의 마찰력이나 반발력을 조정하기 위해 Physics Material 2D를 사용합니다. 이 재질을 Collider에 추가하면 서로의 움직임에 영향을 주는 방식(예: 미끄러움 정도)을 조정할 수 있습니다.

4. 충돌 감지

충돌 감지를 통해 캐릭터가 구조물과 충돌했는지 확인할 수 있습니다. 이를 위해 Unity에서는 OnCollisionEnter2D, OnCollisionStay2D, OnCollisionExit2D 메서드를 사용할 수 있습니다.

 

void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Structure"))
    {
        // 충돌 처리 로직
    }
}

 

5. 레이어와 충돌 매트릭스 설정

유니티의 Layer 기능을 사용하여 객체들을 특정 그룹으로 분류하고, Edit > Project Settings > Physics 2D에서 각 레이어 간의 충돌을 설정할 수 있습니다. 이렇게 하면 특정 객체들끼리만 충돌하도록 설정할 수 있습니다.

이렇게 설정하면 캐릭터가 구조물과 충돌했을 때 서로 통과하지 않고 충돌 처리가 이루어지게 됩니다. 이를 통해 게임 플레이의 일관성을 유지할 수 있습니다.

 
 
위처럼 어렵게 챗지피티가 대답을 했는데 그냥 Rigidbody2D 와 BoxCollider2d를 추가해주면 된다. 그럼 서로 충돌해서 통과하지 않게 된다. 한가지 주의해야할 점은 Rigidbody2d에는 중력이 있는데 중력을 1에서 0으로 바꿔줘야 아래로 떨어지지 않는다. 
 

 

이게 캐릭터(유령)에 추가해준것이다. 중력 Gravity Scale은 1에서 0으로 수정했다.바디타입은 움직이기 때문에 다이나믹이고 구조물 카오스닉던전은 고정이기 때문에 스태틱으로 해주었다. 

그럼 서로 통과하지 않게 된다. 콜라이더가 잘 작동해서 캐릭터가 카오스닉던전을 통과하지 않게 되었다 그러나 문제가 발생했다. 

 

캐릭터가 누워버렸다. 던전을 등반하듯이 계속 비비니까 각도에 맞춰 캐릭터가 회전해버렸다. 바로 챗지피티에게 물어봤다. 

 

캐릭터가 비스듬히 기울어지지 않도록 하기 위해서는 Rigidbody2D의 회전을 고정할 필요가 있습니다. 이렇게 하면 물리 계산 중에도 캐릭터가 회전하지 않고 항상 똑바로 서 있게 됩니다. 이를 위해 Rigidbody2D 컴포넌트의 Constraints를 사용합니다.

Rigidbody2D의 회전 고정

  1. 캐릭터 객체 선택: 먼저, 유니티 에디터에서 캐릭터 게임 오브젝트를 선택합니다.
  2. Rigidbody2D 컴포넌트 설정: 인스펙터 창에서 Rigidbody2D 컴포넌트를 확인합니다.
  3. Constraints 옵션 찾기: Constraints라는 섹션이 있을 것입니다. 여기에서 Freeze Rotation 옵션을 선택합니다.
  4. Z축 고정: Freeze Rotation을 체크하면 하위 옵션으로 X, Y, Z축 회전을 고정할 수 있는 체크박스가 나타납니다. 2D 게임에서는 일반적으로 Z축 회전을 고정하면 됩니다. Freeze Rotation Z를 체크하세요.

Constraints  에서  Z축에 체크를 했더니 아무리 비스듬히 캐릭터를 하려고해도 되지 않았다. 

 

캐릭터가 비스듬해지는 영상과 해결한 영상

4.충돌비스듬.mp4
2.22MB
5.충돌완성.mp4
2.22MB

이상!

반응형

댓글