새소식

⇥ 2D Game/Unity

Unity 게임 만들기 프로젝트 - 충돌 (Collision)

  • -
반응형

1. Collision

게임 세상에서 땅을 딛고 벽을 만나면 더이상 이동할 수 없는 등 가로막히는 현상이 있다. 이것은 각 물체에 Collider 라는 설정이 되어 있고 각각의 Collider 끼리 부딪히면 Collision 판정이 일어난다. 
Collision 판정이 일어났을 때 다양한 동작을 할 수 있기 때문에 충돌을 관리하는 것 역시 중요하다.

 

2. Collider

Player Object 가 땅을 딛도록 하기 위해서, 3D Object -> Plain 을 선택하여 땅을 만들어준다.

Plain 은 기본적으로 Mesh Collider 를 가지고 있는데, 평평한 땅의 충돌을 감지해주는 Collider 가 설정되어 있는 것이다.

Player Object 에는 Capsule Collider 를 설정해준다. Scene 편집 화면에서 케릭터의 충돌 범위를 지정해줄 수 있다.
이렇게 하면 Player Object 의 Capsule ColliderPlane 의 Mesh Collider 가 각각 충돌 범위가 지정되었고,
부딪히면 Collision 이 발생하게 되는 것이다. 

하지만 땅을 디디기 위해선 중력이 작용해야 하는데,
유니티의 물리엔진을 적용하기 위해 Player Object 에 Rigidbody 컴포넌트를 달아준다. 
내부 설정에 Use Gravity 를 Check 하면 중력을 받기 때문에 아래로 떨어지게 되고, Plane 의 Mesh Collider 와 부딪히게 된다.
물리 엔진이 적용되었기 때문에 부딪히면 쓰러지게 되는데, Constraints > Freeze Rotation 을 체크하면 해당 현상을 제거할 수 있다.

3. 충돌 테스트

땅을 디뎠지만 충돌을 테스트하기 위해 Cube 하나도 생성해준다. 역시 Box Collider 를 적용해 충돌을 감지 할 수 있게 해준다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestCollision : MonoBehaviour
{
    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log("Collsion!");
    }
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

그리고 Unity 에서 제공하는 함수인 Collision 이 발생하면 실행되는 OnCollsionEnter 함수를 사용해서 CollisionTest 코드를 작성한다.
그리고 Player Object 에 이전에 작성했던 PlayerController 와 CollsionTest 스크립트를 적용해준다.

 

이제 케릭터 오브젝트를 움직여서 해당 Cube 와 충돌을 시키면 Console 에 Collsion ! 문구가 발생하는 것을 알 수 있다.

이런식으로 각 물체에 대해 Collider 를 설정하고, Collsion 이 발생했을 때에 대한 이벤트를 작성해주면서 게임을 제작할 수 있다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.