본문 바로가기

유니티/자동차

유니티 자동차 드리프트 구현

드리프트

자동차의 드리프트는 후륜의 접지력을 잃은 상태에서 전륜의 접지로만 주행했을 때 발생한다.

쉽게 말하면 전륜으로만 주행하는 상태가 되는 것이다.

 

보통 후륜의 접지를 떨어트리기 위한 준비 동작 - 오버스티어 발생 - 원하는 방향으로 조향 - 후륜 접지 회복의 과정으로 이루어진다.

 

준비 동작의 분류로는 아래 3가지가 주류이다.

관성을 이용한 관성드리프트(스칸디나비안 플릭, 펜듈럼 턴 이라고도 부른다.)

핸드브레이크를 이용한 핸드브레이크턴

후륜의 힘을 이용한 파워슬라이드

 

관성 드리프트

(예시는 모든 타이어의 접지를 전부 잃어버릴뻔 했으나 신경쓰지 말자)

관성드리프트의 원리는 진행하려고 했던 방향에서 반대 방향으로 조향을 바꾸면 차체의 관성으로 인해

타이어의 접지력을 잃게 되고 미끌어짐으로써 발생한다.

 

예시를 보면 원래 가려던 방향(왼쪽)으로 가다가 갑자기 오른쪽으로 선회해버리니

후륜 타이어가 노면과의 접지를 원활하게 할 수 없게되어 마찰력이 사라지게 되는 것이다.

 

사실 이렇게만 들으면 이해가 잘안될 수 있다.

자동차가 받는 물리는 눈에 보이는 자동차 통짜 한개가 아닌 모든 부품의 부분이 물리가 다르게 작용한다.

 

다른 예시를 떠올려보자.

롤러코스터를 알고있는가. 롤러코스터의 열차는 분명 눈으로 보기엔 열차 하나이다.

하지만 맨 앞에 탄 승객과 맨 뒤에 탑승한 승객은 같은 코스여도 다른 느낌을 받게 된다.

그냥 이 정도로만 알고 있으면 될 것 같다.

 

관성 + 핸드브레이크턴

핸드브레이크턴을 설명하기 앞서

핸드브레이크는 후륜에만 브레이크를 거는 역할을 한다.

 

핸드브레이크를 사용하면 후륜에 제동이 걸리면서 멈추고 싶어한다.

반면 타이어는 제동에 필요한 접지를 충분히 확보하지 못해 잃어버리고 미끄러지는 상황을 발생시켜

드리프트가 이루어진다.

 

예시를 생각해보면 앞으로 잘달리고 있다가 급브레이크를 밟아보자

차는 멈추고 싶어하지만 타이어가 급격한 상황을 받아들이지 못해 미끄러지는 것이다.

현실에서 자동차가 사고나기전에 끼이익 하는 소리를 들어본 적이 있는가.

타이어가 나죽네 하면서 비명지르는 소리이다.

 

여기에 핸드브레이크턴에 대한 원리를 소개해주고 있다.

https://youtu.be/vSrlbg7iDuw

내셔널 지오그래픽 채널의 핸드브레이크 소개

 

 

https://youtu.be/-gXdO5IHf3k

ㅠㅠ

파워슬라이드

 

보통 고마력의 후륜차에서 쉽게 발생한다.

자동차는 높은 마력으로 바퀴를 빠르게 돌려 앞으로 튀어나가고 싶은데 타이어가 그 회전력을 버티지 못해

접지를 잃어 버린다.

 

https://youtu.be/mUH1Sgmi6Xg

이렇게 고마력의 후륜차에서 풀악셀을 밟아도 앞으로 나가지 못하는 기현상을 찾아볼 수 있다.

이를 바탕으로 타이어가 버틸 수 있는 한계보다 출력을 내세우면 접지를 잃게 되면서 파워슬라이드를 만들 수 있다.

 

 

이제 (드디어!)

유니티로 구현해보자.

 

앞서 이야기한것들처럼 드리프트는 후륜타이어가 접지를 잃었을 때 발생할 수 있다고 소개하였다.

벌써 답이 나왔다.

 

휠 콜라이더의 항목중 타이어의 마찰계수를 조절할 수 있는 변수가 존재한다.

stiffness 값을 조절하면 된다.

이 값이 낮을수록 타이어의 마찰력이 줄어든다.

 

이를 토대로 핸드브레이크 턴을 구현할 것이다.

 

휠 콜라이더 컴포넌트를 받아올 변수 및 타이어 마찰조절을 위한 변수를 선언한다.

 

그리고 마찰력을 얼마나 떨어트릴지 관여할 변수도 선언한다.

 

 

Start 메소드에서 컴포넌트를 얻고

해당 컴포넌트의 타이어 마찰값을 저장해준다.

 

 

참고로 콜라이더의 마찰값을 직접 바꾸면 에러가 나게 된다.

반드시 WheelFrictionCurve 를 사용하여야 값을 변경해야한다.

 

 

Update 메소드에서 핸드브레이크 키를 누르고 있으면 타이어의 마찰력을 감소시키고

떼면 다시 마찰력을 복원시키는 코드를 작성하면 된다.

 

핸드브레이크 키를 누르지 않은채 조향

 

핸드브레이크 키를 누른채 조향

후륜의 마찰력이 떨어지면서 미끄러지는 모습을 확인할 수 있다.

 

 

움직임이 비현실적일 수는 있지만 보완하려면 작성해야할 코드가 많아질 것이다.

그리고 아케이드 성향을 가진 게임을 구현한다면 굳이 너무 많은 것을 알필요가 없다.

만약에 정말 좀 더 현실적인 게임을 원하면 전에 이야기 했던 것처럼 시뮬레이션 성향의 레이싱 게임을 추천합니다.

완벽하게 만들고 싶다면 자동차에 대한 공부를 하면 좋을 것이다, 추가로 현실의 다양한 것들을.

코딩은 현실에 있는 것을 옮겨적는 것이니까

 

 

+ 추가

휠콜라이더를 사용한 자동차를 조작해보면 알겠지만 관성드리프트는 알아서 구현되어있다.

속도를 낸 뒤 한쪽으로 방향을 잠깐 꺾고 반대방향으로 급하게 틀면 후륜이 미끄러지는 것이 느껴진다면 그 것이다.

뭔가 코딩을 해야하는 것이 아닌 물리법칙에 의해서 만들어지는 것이기 때문

 

파워드리프트는 시도를 안해봤다.