애니메이션 커브를 최고의 디자인 레버로 활용하는 방법

EDUARDO ORIZ / UNITY TECHNOLOGIESSenior Content Marketing Manager
Jul 21, 2022|27 분
애니메이션 커브를 최고의 디자인 레버로 활용하는 방법
이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.

게임 디자이너를 대상으로 하는 크리스토 놉스의 블로그 포스팅 시리즈 중 세 번째 게시물입니다. 이 시리즈는 그의 공헌을 다음과 같이 확장합니다. Unity 게임 디자이너 플레이북는 게임 디자이너에게 Unity에서 게임플레이를 프로토타이핑, 제작 및 테스트하는 방법을 알려주는 100페이지가 넘는 심층 가이드입니다. 이 게시글의 끝부분에는 크리스토의 이전 블로그 게시글로 연결되는 링크가 있습니다.

유니티에서는 시스템, 게임플레이, 캐릭터 설정, 차량 프로필 등의 밸런싱을 위한 디자인 레버만큼이나 유용한 데이터를 저장하는 데 사용할 수 있는 몇 가지 '유형'이 있습니다. 애니메이션 커브는 게임 디자이너와 크리에이터에게 특히 프로토타입 제작 시 흥미로운 가능성을 제공하는 컴포넌트 유형 중 하나입니다. 프로젝트에 애니메이션 커브를 사용할 때는 파티클 시스템 내에 설정해 애니메이션 변수를 제어하거나, 오디오 소스 컴포넌트 내에 설정해 롤오프와 같은 여러 프로퍼티를 관리할 수 있습니다.

커브는 변화하는 입력값(X축)에 대한 반응(Y축)을 보여 주는 선 그래프입니다. Unity는 다양한 컨텍스트에서 커브를 사용하는데 특히 애니메이션에서 많이 사용합니다. 커브 에디터에서는 다양한 옵션과 툴을 활용할 수 있습니다.

이 게시물에서는 애니메이션 커브 변수 유형인 애니메이션 커브를 사용하여 Unity API를 통한 애니메이션 커브 작업에 대해 중점적으로 설명합니다. 이와 같이 애니메이션 커브를 사용하면 데이터를 캡처하고 저장할 수 있으므로 결과를 분석할 때 유용합니다. 커브는 플레이북에서 설명한 대로 게임플레이 데이터를 편집하는 데 유용한 스크립터블 오브젝트와도 호환됩니다.

애니메이션 커브는 인스펙터(Inspector)에서 public 변수로 편집하거나, 직렬화될 때 편집할 수 있습니다. 편집 모드에서나 런타임 시 애니메이션 커브를 저장, 익스포트, 로드할 수 있습니다. 편집 가능한 탄젠트를 사용하면 키 사이의 곡선 모양을 제어할 수 있습니다.

인스펙터의 애니메이션 커브 프로퍼티
인스펙터의 애니메이션 커브 프로퍼티입니다: 이를 클릭하면 커브 편집기가 열리고, 톱니바퀴 아이콘을 선택하여 커브를 조정하고 나만의 라이브러리에 저장할 수 있습니다.
Unity에서 탄젠트의 열쇠
커브를 더블 클릭하면 커브를 다룰 때 사용할 새로운 키가 생성될 뿐만 아니라 키 핸들을 제어할 수 있는 여러 옵션도 제공됩니다.

커브에서 키를 추가하고, 탄젠트를 변경하고, 핸들을 조작하여 원하는 결과를 도출할 모양을 만들 수 있습니다.

탄젠트가 여러 개인 애니메이션 커브
자연스러운 요철과 가파른 각도를 만들도록 탄젠트가 조정된 Animation Curve
일상적인 움직임에 사실적인 디테일 추가

애니메이션 커브와 같은 시각적 디자인 레버를 사용하면 게임 디자이너가 복잡한 수학이나 완화 함수를 작성하지 않고도 게임플레이를 정교하게 만들 수 있습니다.

애니메이션 커브를 사용하려면 타임라인에서 선형 모션에 뉘앙스와 디테일을 추가할 수 있습니다. 자동차 문을 닫는 캐릭터를 예로 들어 보겠습니다. 문을 닫기 위해 손으로 레버를 잡을 때 자동차가 흔들리면서 동작이 시작됩니다. 처음에는 문이 천천히 닫히지만, 문이 닫히는 과정에서 모션이 빨라지고 문이 완전히 닫히면서 갑자기 멈추며 끝납니다. 이때 약간의 반동이 동반될 수 있습니다. 이러한 모든 모션은 시퀀스용으로 같은 커브에 저장할 수 있습니다.

Unity 에디터의 녹색 가에서 갈색 문이 열리고 닫히는 모습
애니메이션의 타임라인에서 커브를 사용하여 문이 열리고 닫히는 모습
문을 열 때의 커브
문을 열 때의 커브
문을 닫을 때의 커브
문을 닫을 때의 커브

이 예에서 볼 수 있듯이 애니메이션 커브를 사용하면 오브젝트의 프로퍼티를 점점 변경해 가며 자연스러운 움직임을 만들 수 있습니다. 다른 사용 사례로는 오브젝트가 움직이거나 회전하는 방식, 캐릭터가 달리면서 가속하거나 감속하는 방식, 엔진이 자동차 컨트롤러에 동력을 전달하는 방식 등이 있습니다.

애니메이션 커브 C# 코드
인스펙터의 애니메이션 커브가 X축상 주어진 위치에서 Y축 데이터를 어떻게 반환하는지에 대해 설명하는 이 개요를 참조하세요. 하단의 메서드에서는 원하는 커브와 위치를 전달하여 EvaluateCurve 메서드를 사용하는 방법을 보여 줍니다.

인스펙터에서 편집할 애니메이션 커브를 생성할 때 Unity에서 시간이라고 하는 파라미터를 전달하여 커브를 평가할 수 있습니다. 이 게시글의 뒷부분에서 time에 X축을 사용하지 않을 때 위치가 더 구체적인 이유를 살펴보겠습니다.

엔진 출력을 제어하기 위한 '유사' 모터 토크 커브

애니메이션 커브를 사용하여 어떻게 차량의 엔진 출력을 제어할 수 있는지 살펴보겠습니다. '유사(pseudo)' 모터 토크 커브를 만들면 현재 엔진 RPM(분당 회전수)을 기반으로 차량에 가해진 힘을 반환할 수 있습니다. 플레이어가 가속 페달을 밟으면 이 값은 점점 증가합니다.

각 기어와 차량의 전체 RPM 범위를 매핑하는 대신 0에서 1 사이의 RPM을 '정규화'하거나 설정할 수 있습니다. 생성한 '토크' 커브는 저장하여 다른 차량과 기어에 재사용할 수 있습니다.

원시 값 또는 현재 값을 최대 값으로 나누어 이 값을 설정합니다:

normalisedCurrentRPM = currentRPM / maxRPM

엔진 출력값(Y축)도 커브 에디터에서 관리하고 커브 자체를 재사용할 수 있도록 0에서 1 사이의 값을 사용합니다. 이 값을 차량의 운동력에 추가하면 차량의 리지드바디가 Z축상에서 앞으로 이동할 수 있습니다.

RPM을 정규화하는 스크립트 예시
RPM을 정규화한 후 주어진 RPM에서의 토크 커브 Y값에 엔진 출력을 곱한 값을 기반으로 힘을 추가하는 스크립트의 예입니다.

커브에서 0,0과 1,1 사이의 값을 유지하면 다른 차량에서 같은 설정으로 다양한 값을 얻을 수 있습니다.

위쪽 녹색 곡선

자동차 엔진에 기본 기어비 방정식을 추가하면 기어를 변경하고 다양한 파워 커브나 다른 지점의 같은 커브에 진입할 때 움직이면서 흔들리는 사실적인 차량을 만들 수 있습니다. 그러려면 자동차에 리지드바디가 설정되어야 합니다. 리지드바디를 자동차의 트렁크나 뒷좌석에 추가하면 자동차의 움직임에 영향을 주기 때문에, 정해진 시간 내에 물건을 배송해야 하는 등의 미션을 재미있게 만들 수 있습니다.

커스텀 자동차 컨트롤러가 있어 Unity 물리 시스템을 사용하고 싶지 않은 경우, 짐을 많이 싣고 있는 상태와 그렇지 않은 상태를 나타내는 커브를 각각 만든 후 런타임 시 이러한 커브를 바꿔 원하는 방향으로 차량이 움직이도록 할 수 있습니다.

자주 사용하진 않겠지만, Unity API를 통해 런타임에 커브에서 키를 추가하고, 키를 수정 (새 키를 제거 및 추가)하고, 키를 완전히 제거할 수 있습니다. 이렇게 하면 필요에 따라 탄젠트를 부드럽게 하는 등 커브 수정을 더 제어할 수 있습니다.

자동 기어가 장착된 트럭과 같이 천천히 시동을 걸지만 최고 RPM에 도달한 후에도 동력을 잃지 않는 대형 차량의 커브입니다: 이 곡선은 적재물이 없는 트럭을 보여줍니다.
이 곡선은 무거운 짐을 실은 트럭을 보여줍니다. 예를 들어 차량이 움직이기 시작한 후에 다른 키를 추가하고 동력을 줄이면 트럭에 2단 기어를 넣은 듯한 상태를 구현할 수 있어 더 독특한 차량을 만들 수 있습니다.
여러 기어가 있는 차량의 단일 커브
여러 기어가 있는 차량의 단일 커브

애니메이션 커브를 사용하면 보다 복잡한 시스템을 탁월하게 추상화하여 시각적 형식으로 제어할 수 있습니다. 엔진에 관한 예에서, 위에 나온 '유사' 변속기를 나타내는 커브를 사용하여 가속할 때 동력을 추가하면 자동차 기어를 변경하는 듯한 느낌을 줄 수 있습니다. 동력이 전달될 때 최고점을 높이고, 각 기어의 최고점에서 동력이 줄어들 때 다시 값을 아래로 낮추도록 조정하는 셈입니다. 이 방식은 x0,y0인 1단 기어의 시작부터 x1,y1인 5단 기어의 최고점에 이르기까지 모든 기어를 매핑하는 하나의 커브에 모든 자동차 동력을 배치하여 차량의 움직임을 프로토타이핑할 때 적합합니다.

RPM은 일반적으로 가속할 때 시간이 지남에 따라 누적되므로 기본적으로 움직이는 물체에 선형 움직임을 추가하는 것과 마찬가지로 시간에 따른 값을 플롯합니다. 이에 대한 자세한 내용은 타이밍 및 애니메이션 섹션의 게임 디자이너 플레이북.

네온 블루 조명이 도로를 둘러싼 넓은 격자형 도로에서 미래지향적으로 보이는 세 대의 자동차가 경주를 벌이고 있습니다.
'유사' 물리는 Unity를 사용하여 제작된 미래 지향적 레이싱 게임 Antigraviator와 같이 모션이 실제 물리 규칙을 따르지 않는 게임에 유용합니다.

다른 예로 자동차가 고르지 않은 터레인을 지나거나 코너를 돌 때 또는 바퀴에 동력이 전달될 때의 자동차 서스펜션과 모션을 살펴보겠습니다. 애니메이션 커브로 더 나은 스티어링, 횡력 제어, 타이어 미끄러짐을 모두 관리하여 시각적으로 개선이 가능한 사실적인 결과를 만들 수 있습니다.

호버 비히클이든 바퀴 달린 비히클이든 레이캐스트 기반 메커니즘을 만들 때 엔진에 '서스펜션' 효과를 내기 위해 일반적으로 선택하는 것은 각 레이에 가해지는 상향 힘과 바운스를 제어하기 위한 PID(비례 적분 미분) 컨트롤러 알고리즘 또는 경우에 따라 댐핑을 위한 후크의 법칙을 사용하는 것입니다. 이에 대한 예시는 유니티의 호버 레이서 라이브 7/21 사이클 4.2에서 확인할 수 있으며, 이 게시물의 아래쪽에서 이를 기반으로 한 PID를 사용한 예시도 확인할 수 있습니다.

PID 컨트롤러 알고리즘은 반응형 보정이 필요할 때 게임 개발을 비롯한 여러 산업에서 사용되는 제어 루프 피드백 메커니즘 또는 컨트롤러입니다. PID 컨트롤러는 측정된 프로세스 변수와 원하는 설정값 간의 차로 오륫값을 계산합니다. 탄성이나 이 게시글에서 주어진 예의 경우 훅의 법칙 대신 PID 컨트롤러를 사용할 수 있습니다. 게임에 PID를 적용하면 다음과 같은 경우에서도 유용합니다.

  • 전달되는 질량, 플레이어 입력, 각진 터레인 등과 같은 다른 요인으로 인해 차량이 예상치 못한 영향을 받는 와중에 순항 제어 모드에서의 차량 목표 속도를 조절하는 경우
  • 적 AI 에이전트가 플레이어에 반격할 때 플레이어의 공격을 피하면서 플레이어를 맞추는 정확도를 제어하는 경우
  • 멀티플레이어 게임에서 지연을 예측하는 경우

PID는 게임 개발, 특히 '정확하고 최적화된 자동 제어'가 필요한 샌드박스 및 시뮬레이션 등 어디에서나 사용할 수 있습니다. Squad의 케르발 우주 프로그램은 PID를 사용하여 우주선이 한 방향으로 향하도록 유지합니다.

이 연구에 따르면, 게임 개발을 제외하고 "PID 규제는 연속 시스템에서 가장 성숙하고 널리 사용되는 기술"입니다. 이 제어 시스템 강의를 참조하세요: 자세한 내용은 PID 제어 소개 를 참조하세요.

우주 로켓이 격납고에 있고 왼쪽에 로켓의 사용자 지정 옵션을 보여주는 인터페이스가 열려 있습니다.
Squad에서 제작한 Kerbal Space Program은 Steam에서 구매할 수 있으며, PID 컨트롤러 알고리즘을 사용합니다.

PID 컨트롤러 알고리즘을 만드는 데는 많은 시간이 걸리지 않을 수 있지만, 알고리즘의 균형을 잡는 데는 시간이 상당히 소요됩니다. 또한 보유하고 있는 차량 수에 따라 소요 시간은 배가 됩니다. 그러나 프로토타이핑 시 애니메이션 커브를 대신 사용하면 시간을 절약할 수 있습니다. 또는 여러 PID 컨트롤러를 구현하고 균형을 맞추는 과정에서 마주하는 기술적 어려움을 피할 수 있습니다. 하지만 완벽히 제어하려면 커브 솔루션을 PID로 교체하는 것이 좋습니다.

커브는 프로토타이핑에 이상적입니다. 커브를 사용하여 오브젝트가 실제 타겟 레퍼런스 예시와 시각적으로 일치하도록 만들 수 있기 때문입니다. 특히 우주 공간은 게임 엔진에서 수학적으로 완벽하며, 별도의 힘을 가하거나 기본 중력을 사용하지 않는 한 반대 운동력이 작용하지 않습니다. 따라서 변화를 제어하고 뛰어난 결과를 얻으려면 단순한 커브를 사용하는 것이 더 간편할 때도 있습니다.

차량용 서스펜스를 만드는 경우, PID 컨트롤러를 사용해 감속 효과를 만드는 대신 애니메이션 커브를 사용하여 0~1 사이의 값으로 정규화된 스프링 압축 정도에 따라 가해지는 저항력을 확인할 수 있습니다. 리지드바디와 약간의 항력을 함께 사용하면 반동으로 인한 진동이 억제되고, 차량의 서스펜션은 하중의 증가나 감소에 반응합니다.

스프링 압축률을 정하려면 1.0f에서 스프링 길이를 뺀 후 레이 도달 거리를 빼야 합니다. 스프링의 길이와 상관없이 스프링이 25% 압축된 상태이면 압축 값은 0.25가 됩니다. 이 압축 값을 애니메이션 커브의 X 값으로 설정하고 원하는 스프링 힘에 곱한 다음(정규화된 값으로 작업하기 때문에) AddForceAtPosition에서 이를 사용하여 서스펜션 포인트 수에 따라 루프의 각 포인트에 상향 힘을 적용합니다. Unity의 기본 중력인 -9.81f 외에 부가적으로 하향력을 추가하지 않아도 됩니다.

공식은 다음과 같습니다:

upwardsForce = forceMultiplier * forceCurve.Evaluate(springCompressionNormalized);

rigidBody.AddForceAtPosition(hitNormal * upwardsForce, point.transform.position);

질량:힘 비율 13:110과 아래 커브를 사용합니다.

Unity에서 숲 앞 도로에 바퀴가 없는 흰색 밴이 쓰러져 있습니다.
서스펜션 길이가 연장된 바퀴가 없는 밴(스프링 길이 1m): 밴이 고르지 않은 각도로 똑바로 떨어지고 앞뒤로 흔들립니다.
이중 시그모이드 곡선
이중 시그모이드 곡선

진동을 억제하고자 질량, 상향력, 약간의 선형 항력과 각항력에 적절한 값을 사용하면 차량은 약 50% 압축률로 안정화됩니다. 이렇게 하면 차량이 반동을 겪은 후 안정화됩니다. 하지만, 차량이 매우 높은 높이에서 떨어지는 경우거나 플레이어가 질량을 추가해 차량이 과적 상태인 경우가 아니라면 차량이 바닥에 닿지 않습니다.

좋은 값을 찾으려면 원의 1/4과 비슷한 모양인 y = b^x 곡선으로 시작하세요. 항력을 낮게 유지하고 차량의 질량을 실제와 동일하게 설정합니다. 그런 다음 차량이 약 50%의 스프링 압축률로 안정화될 때까지 상향력을 조정합니다. 차량을 몇 번 떨어뜨리면서 바닥에 닿는지 확인하고, 반동 후에 안정화되는 지점이 어디인지 확인합니다. 순간 정지 마찰력이 발생하거나 사라지는 울퉁불퉁한 터레인을 달리는 차량의 서스펜션에 이 방식을 사용하면 빠르고 제어가 가능한 서스펜션 시스템을 만들 수 있습니다.

서스펜션 모델에 애니메이션 커브를 사용하면 서스펜션이 좋지 않은 자동차, 밴, 트럭 등의 차량에 다양한 모션을 구현할 수 있습니다. 차량이 항상 바닥에 닿거나, 아케이드 게임처럼 반동이 심하거나, 코너에서 구르거나, 액셀이나 브레이크를 밟을 때 흔들리도록 만들 수 있습니다. Unity 리지드바디 시스템이나 자체적인 서스펜션 메서드를 사용하지 않는다면 커브를 기존 시스템과 함께 사용할 수 있습니다. 커브를 스티어링에 사용하거나, 엔진 출력, 서스펜션, 항력, 타이어 미끄러짐, 제동력 등을 증폭하는 데 사용할 수 있습니다. 애니메이션 커브는 편리하고 활용도가 높은 Unity 툴로, 각 차량에 디자인 레버를 추가하여 인스펙터에서 차량의 특성을 시각적으로 제어할 수 있습니다.

Unity에서 다양한 특성과 곡선을 가진 회색 공이 떨어지는 현상
차량이 떨어질 때의 특성을 확인하고자 각 리지드바디에 각기 다른 커브를 사용했습니다.
위 이미지에서 각 구체에 사용한 다양한 커브
위 이미지에서 각 구체에 사용한 다양한 커브
오브젝트 드롭을 위한 C# 코드 스니펫
떨어지는 구체의 코드 스니핏

위 이미지의 구체들은 일련의 리지드바디를 나란히 배치하고 X와 Z Freeze Position 프로퍼티를 제한해 만들었습니다. 그런 다음 압축 상향력을 기반으로 하는 애니메이션 커브를 사용하여 상향력을 적용했으나, 구체마다 각기 다른 커브를 사용했고 한눈에 비교하기 쉽도록 나란히 배치했습니다. 이 기술을 사용하면 오브젝트에 원하는 정도의 반동을 더하거나 기존 반동을 미세 조정하여 특성의 균형을 잡을 수 있습니다. 디자이너로서 상향력의 특성을 조절할 수 있다면 더 복잡한 함수를 추상화할 수도 있습니다.

커브는 유용한 XY 차트 데이터 유형입니다. 기술적으로 완벽하지는 않아도 인스펙터에서 시각적으로 편집하고 런타임 시 프리셋으로 저장할 수 있는 빠른 감속 솔루션을 프로토타이핑할 때 유용하게 사용할 수 있습니다. 댐핑의 기술에 관한 이 블로그에서 Alexis Bacot은 '좋은 댐핑에 의존하는 모든 것'에 대해 강조합니다. "감쇠는 카메라, 애니메이션, 움직임, 컬러 그레디언트, UI 전환 등 모든 곳에서 사용됩니다. 완성도를 높이려면 감쇠를 이해해야 해요. 감쇠만으로도 경험의 만족도를 가르는 차이를 만들 수 있습니다"라고 말합니다.

같은 게시물에서 그는 Unity의 SmoothDamp를 사용하여 아름다운 이지 인/아웃을 만들고 타깃의 변화에 정확하게 반응하는 방법을 시연합니다. 하지만 이 함수를 사용해도 자동차 서스펜션이나 공 물리 모방에 적합한, 진동할 수 있는 고급 스프링 댐퍼처럼 반동하지는 않습니다. 이를 통해 애니메이션 커브가 매우 뛰어난 이점을 제공함을 알 수 있습니다.

물론 커브는 게임플레이를 조작하기 위한 XY 데이터 유형 외에도 쓰임새가 많습니다. 또한 Unity API를 통해 AddKey를 사용하여 데이터를 시각적으로 캡처하는 평가 툴로 사용할 수도 있습니다. 차량 서스펜션 예시에서 댐핑이나 낙하하는 구체와 같이 시간에 따른 위치를 평가하려면 메서드에서 AddKey(elapsedTime, currentSpringCompression)를 사용한 다음 해당 메서드를 호출하고 InvokeRepeating을 통해 반복 속도로 captureResolution을 전달합니다. 캡처 해상도 0.1f는 0.1초마다 커브에 키가 추가된다는 뜻입니다. 인스펙터에서 결과를 미리 보거나, 그래프를 열어서 전체 데이터를 확인할 수 있습니다.

플롯된 곡선
0,0에서 1,1까지의 직선이 있는 선형 반동 커브를 사용하여 구성한 커브 결과
플롯된 곡선
위와 유사한 결과로, 선형이 아닌 이중 S자 모양 커브를 사용하여 구성한 커브 결과
반동이 있는 밴의 예시

마지막으로, 밴의 예시로 돌아가서 떨어지는 밴을 살펴보겠습니다. 애니메이션 커브는 스프링 압축률을 기반으로 가해지는 힘의 양을 결정하고, 세 번째로 튀어 오를 때 진동이 조금 더 발생한다는 목표에 가까운 결과를 만들어 냅니다. 애니메이션 커브로 생성된 서스펜션을 Unity의 호버 레이서 라이브 7/21 사이클 4.2에서 PID를 사용하여 PID 컨트롤러의 서스펜션과 비교할 수 있습니다. 두 서스펜션의 유일한 차이점은 애니메이션 커브의 Y 값이 아닌 부양력을 PID 결과에 곱한다는 점입니다.

PID를 구현한 다음 균형을 잡는 작업을 여러 번 진행하고 나면, 뒤따르는 진동이 적어지고 억제에 필요한 항력도 줄어들면서 차량의 서스펜션이 목표와 더 비슷해진 느낌을 줍니다. 하지만 PID 사용 시 차량의 질량이 다르면 차량마다 균형을 잡아야 해서 시간이 오래 걸립니다. 프로토타이핑 목적이라면 애니메이션 커브를 사용하여 빠르고 시각적으로 원하는 결과를 얻을 수 있으며, 모션의 구성된 결과를 분석할 수 있습니다. PID 구현을 평가하려면 다시 한 번 커브를 사용하여 결과를 빈 커브에 표시하면 됩니다. 이제 더 나은 결과가 생성되었습니다. 두 번째 반동이 조금 과장되기는 했지만, 공중에 떠 있는 대형 밴에 원하는 모션과 모습을 제공합니다.

바퀴가 없는 흰색 밴이 공중에 매달려 있는 모습, Unity에서 살펴보기
PID를 사용하여 차량 서스펜션을 최종 구현했지만 프로토타이핑 중에 개발한 애니메이션 커브를 기반으로 합니다: 서스펜션은 여전히 1미터의 스프링 길이를 사용하여 과장되어 있습니다.
왼쪽에 목표 댐핑 커브, 오른쪽에 결과 커브가 그려져 있습니다.
왼쪽은 알렉시스 바코의 타겟 감속 커브 결과이고, 오른쪽은 PID를 구현한 후 차량의 움직임을 구성한 결과입니다.

요약하자면, 비히클 모션을 개발할 때 애니메이션 커브를 사용하면 다음과 같은 효과를 얻을 수 있습니다:

  • 차량 엔진 동력의 출력을 구성하고 원활한 동력 진행을 생성할 수 있습니다.
  • 실제 자동차의 제동을 시뮬레이션하기 위해 제동력을 빠르게 가했다가 시간이 지남에 따라 제동력을 줄이는 동작을 만들거나, iRacing과 같은 게임에서 운전자가 타이어 한계에 브레이크를 밟아 자동차가 제어 불능 상태가 되지 않고 짧은 시간에 속도를 늦추는 등 실제와 같은 제동 동작을 만들 수 있습니다.
  • 자동차에 상향력을 제공하는 서스펜션 시스템을 시뮬레이션할 수 있습니다.
  • 차량이 왼쪽이나 오른쪽으로 치우쳐서 미끄러지지 않도록 방지하는 측면 저항력을 계산하여 측면 정지 마찰력을 시뮬레이션할 수 있습니다.
  • 컨트롤러를 사용할 때 스티어링을 시뮬레이션할 수 있습니다. 스티어링에는 -0.5에서 0.5 사이의 중간값을 사용할 수 있지만, 스틱 위치가 -1이나 1에 가까워질수록 점점 더 빨라집니다.
산으로 둘러싸인 푸른 물 위에 떠 있는 녹색 블록, Unity에서 구현하기
이 프로토타입에서는 curve.Evaluate(time)를 사용하여 플랫폼의 트랜스폼을 시간에 따라 Y축으로 옮겼습니다.

차량 물리 외에도 플레이어 움직임, 시간에 따른 공격 대미지 등을 프로토타이핑할 때 애니메이션 커브를 디자인 레버로 사용할 수 있습니다. 강력한 프로토타이핑 툴인 애니메이션 커브를 사용하면 게임 디자이너는 복잡한 알고리즘을 작성하거나 물리 계산을 하지 않고도 다양한 힘의 적용을 테스트하고 메카닉에 적합한 느낌을 주는 값을 찾을 수 있습니다.

더 많은 지침과 영감을 얻으려면 무료로 다운로드할 수 있는 게임 디자이너 플레이북을 확인하세요.