화면 또는 카메라 흔들기는 게임의 느낌을 생각할 때 가장 먼저 떠오르는 것일 수 있으며, FEEL은 흔들기와 기타 카메라 효과를 트리거하는 다양한 방법을 제공합니다. 이벤트 또는 피드백을 통해 이를 트리거할 수 있으며, 모든 설정을 자유롭게 커스터마이즈할 수 있습니다.
다양한 화면 흔들기 유형
일반적으로 "화면 흔들기"로 지정되는 것은 다양한 방식으로 수행될 수 있습니다. 게임에서 화면 흔들기를 설계할 때, 저는 이를 위한 언어를 정의하는 것을 좋아합니다. 흔들기의 강도 스케일을 정의하고, 사용하려는 다양한 유형의 화면 흔들기에 대한 의미를 결정합니다. 물론, 이는 제가 작업하는 방식이지만, 전혀 다른 방식으로 작업하셔도 좋습니다. 이는 절대적인 규칙이 아닙니다.
강도 스케일: 게임 내에서 화면을 흔들리게 할 수 있는 많은 일이 발생할 수 있습니다. 보통, 이러한 흔들림의 강도를 스케일에 따라 매핑하고, 플레이어에게 중요한 이벤트는 그렇지 않은 이벤트보다 더 강한 강도를 가지게 됩니다. 예를 들어, 플레이어가 다치면 화면이 더 많이 흔들려야 하며, 아이템을 떨어뜨리는 경우에는 그렇게 중요하지 않을 것입니다. "강도"는 사용하는 화면 흔들기의 유형에 따라 다를 수 있습니다. 이는 움직임 범위, 지속 시간, 빈도 또는 이러한 설정 및 기타 설정의 조합일 수 있습니다.
의미: 다양한 흔들림이 제공되므로, 보통 게임 내 특정 이벤트 유형과 연관시키려고 합니다. 대부분의 흔들림은 보편적인 의미가 없으며, 각 흔들림이 게임의 맥락에서 무엇을 의미하는지 정의하는 것은 당신에게 달려 있습니다. 예를 들어, 팩맨 같은 게임에서는 유령을 먹을 때 카메라 흔들기를 트리거하고, 죽을 때는 뷰 흔들기를 트리거할 수 있습니다. 정의된 피드백 언어를 고수하면 플레이어가 원인과 결과를 식별하는 데 도움이 됩니다.
다음은 Feel을 사용하여 구현할 수 있는 가장 일반적인 화면 흔들기 유형 목록입니다:
카메라 위치 흔들기: 가장 일반적인 화면 흔들기 방법 중 하나는 카메라를 단순히 이동시키는 것입니다. Feel은 일반 카메라 흔들기, Cinemachine Impulses, MMWiggle, Cinemachine Noise, Position Shake 등 많은 피드백을 통해 이를 수행할 수 있습니다.
카메라 회전 흔들기: 조금 덜 일반적이지만, 카메라를 이동시키는 또 다른 방법은 회전 흔들기입니다. 이번에는 카메라가 제자리에 머무르지만, 한 축 또는 여러 축으로 회전시킵니다.
카메라 시야/줌 흔들기: 빠르게 줌 인 및 줌 아웃하는 것도 화면을 흔드는 좋은 방법이 될 수 있습니다. 보통 카메라의 시야(Field of View) (또는 2D에서는 정사영 크기)를 조정하여 이를 수행하지만, 카메라를 로컬 z 축으로 이동하여도 얻을 수 있습니다.
뷰 흔들기: 개인적으로 가장 좋아하는 뷰 흔들기는 카메라를 이동하지 않고 전체 뷰를 이동시켜, 플레이 중인 전체 화면이 흔들리는 것처럼 느껴집니다. 이러한 흔들림은 보통 렌더 텍스처에 렌더링하는 것을 필요로 하며, 대부분의 게임은 해상도를 업스케일하기 위해 이를 수행합니다. 유사한 효과는 사용자 정의 포스트 프로세싱 셰이더를 구현하여 얻을 수도 있지만, 이는 하나의 추가 패스이므로 렌더 텍스처 옵션보다 큰 이점이 없습니다.
포스트 프로세싱 흔들기: 렌즈 왜곡 또는 색수차와 같은 포스트 프로세싱 효과의 강도를 흔드는 것은 감정과 "화면 흔들기"를 전달하는 좋은 방법입니다. 비네트, 색상 등급 및 블룸 강도도 좋은 후보입니다.
UI 흔들기: 전체 화면을 흔드는 대신, UI(또는 그 일부)만 흔드는 것도 좋은 생각일 수 있습니다. Toaster 데모와 Duck 데모 씬에서 그 예를 볼 수 있습니다.
Toaster 데모!
Feel에는 화면을 흔드는 다양한 방법을 보여주는 전체 데모가 포함되어 있으며, 해당 데모에서는 토스터를 사용할 수 있습니다. 사이드바 메뉴에서 토스터 피드백을 켜고 끌 수 있으며, 다양한 화면 흔들기 피드백을 트리거할 수 있습니다. 많은 피드백이 눈에 띄게 과장되어 있음을 빠르게 알 수 있으며, 게임의 느낌에 맞게 강도를 조정하고 싶을 것입니다.
Unity 에디터에서 데모를 열어보는 것을 주저하지 마세요(FeelDemos/Toaster 폴더에 있습니다). 이 데모에서는 각 피드백이 어떻게 설정되어 있는지 볼 수 있으며, 실행 중에도 직접 값을 조정하여 피드백이 어떻게 작동하는지 탐색하고 화면을 흔드는 새로운 흥미로운 방법을 발견할 수 있습니다.
이 단일 데모에서 다양한 화면 흔들기 유형을 실행할 수 있도록 설정이 다소 복잡할 수 있습니다. 물론, 게임에서는 그렇게 많은 종류의 흔들기를 원하지 않을 수도 있으며, 그런 경우 아래의 레시피를 참고하면 최소한의 설정으로 좋은 출발점을 얻을 수 있습니다.
카메라 흔들기 레시피
Cinemachine 카메라 흔들기 설정 방법 (권장 방법)
Unity 2022.3.23f1(또는 그 이상)에서 새로운 프로젝트를 생성하고 패키지 매니저를 통해 Feel v4.1.2(또는 그 이상)를 가져옵니다.
패키지 매니저에서 Cinemachine을 가져옵니다.
새로운 빈 씬을 생성합니다.
큐브를 추가하고 위치를 0,0,0으로 설정합니다.
옵션 1: 자동 셰이커 설정
빈 게임 오브젝트를 생성하고 이름을 MyTestFeedbacks로 설정합니다. MMF Player 컴포넌트를 추가하고 위치를 0,0,0으로 설정합니다.
Add new feedback 드롭다운을 통해 새로운 Cinemachine Impulse 피드백을 추가합니다.
Automatic Setup 폴드아웃을 펼치고 Automatic Shaker Setup 버튼을 누릅니다. 필요 시 MainCamera를 선택하고 CinemachineBrain이 있는지 확인합니다. 없다면 추가합니다.
에디터에서 플레이 버튼을 누르고, MyTestFeedbacks 오브젝트를 선택한 다음, MMF Player 인스펙터에서 녹색 플레이 버튼을 누릅니다.
카메라가 흔들립니다!
옵션 2: 수동 설정
상단 메뉴의 Cinemachine 메뉴를 통해 새로운 가상 카메라를 생성합니다.
가상 카메라를 선택하고 Add Extensions 드롭다운을 통해 impulse listener를 추가합니다.
빈 게임 오브젝트를 생성하고 이름을 MyTestFeedbacks로 설정합니다. MMF Player 컴포넌트를 추가하고 위치를 0,0,0으로 설정합니다.
Add new feedback 드롭다운을 통해 새로운 Cinemachine Impulse 피드백을 추가합니다.
인스펙터에서 RawSignal 필드 끝의 작은 톱니바퀴를 클릭하고 Presets > 6D Shake를 선택합니다(톱니바퀴 아이콘이 작동하지 않으면 - 알려진 Cinemachine 버그로 인해, Packages/Cinemachine/Presets/Noise/에서 동일한 프리셋을 찾아 임펄스 피드백 인스펙터로 드래그할 수 있습니다).
Velocity를 인스펙터 하단에서 5,5,5로 설정합니다.
에디터에서 플레이 버튼을 누르고, MyTestFeedbacks 오브젝트를 선택한 다음, MMF Player 인스펙터에서 녹색 플레이 버튼을 누릅니다.
카메라가 흔들립니다!
Cinemachine Impulse Source 피드백 설정 방법
Unity 2022.3.23f1(또는 그 이상)에서 새로운 프로젝트를 생성하고 패키지 매니저를 통해 Feel v4.1.2(또는 그 이상)를 가져옵니다.
패키지 매니저에서 Cinemachine을 가져옵니다.
새로운 빈 씬을 생성합니다.
큐브를 추가하고 위치를 0,0,0으로 설정합니다.
상단 메뉴의 Cinemachine 메뉴를 통해 새로운 가상 카메라를 생성합니다.
가상 카메라를 선택하고 Add Extensions 드롭다운에서 impulse listener를 추가합니다.
빈 게임 오브젝트를 생성하고 이름을 MyTestFeedbacks로 설정합니다. MMF Player 컴포넌트를 추가하고 위치를 0,0,0으로 설정합니다.
CinemachineImpulseSource 피드백을 추가합니다.
AddComponent 버튼을 통해 Cinemachine Impulse Source를 추가하고, 해당 컴포넌트를 피드백의 ImpulseSource 필드로 드래그합니다.
재생 버튼을 누르고, MyTestFeedbacks 인스펙터에서 Play 버튼을 누르면 카메라가 흔들립니다.
일반적인 non-Cinemachine 카메라 흔들기 설정 방법
Unity 2022.3.23f1(또는 그 이상)에서 새로운 프로젝트를 생성하고 패키지 매니저를 통해 Feel v4.1.2(또는 그 이상)를 가져옵니다.
새로운 빈 씬을 생성합니다.
큐브를 추가하고 위치를 0,0,0으로 설정합니다.
옵션 1: 자동 셰이커 설정
빈 게임 오브젝트를 생성하고 이름을 MyTestFeedbacks로 설정합니다. MMF Player 컴포넌트를 추가합니다. 새로운 피드백 추가 > 카메라 > 카메라 흔들기 추가합니다.
Automatic Setup 폴드아웃을 펼치고 Automatic Shaker Setup 버튼을 누릅니다.
재생 버튼을 누르고, MyTestFeedbacks 인스펙터에서 Play 버튼을 누르면 카메라가 흔들립니다.
옵션 2: 수동 설정
카메라 위치에 빈 게임 오브젝트를 생성하고 CameraRig로 이름을 설정합니다.
카메라 위치에 빈 게임 오브젝트를 생성하고 CameraShaker로 이름을 설정하고, 이를 CameraRig 아래에 중첩시킵니다.
메인 카메라를 CameraShaker 아래에 중첩시킵니다. (이제 CameraRig > CameraShaker > MainCamera 구조를 가집니다.)
빈 게임 오브젝트를 생성하고 MyTestFeedbacks로 이름을 설정합니다. MMF Player 컴포넌트를 추가합니다.
새로운 피드백 추가 > 카메라 > 카메라 흔들기 추가합니다.
재생 버튼을 누르고, MyTestFeedbacks 인스펙터에서 Play 버튼을 누르면 카메라가 흔들립니다.
일반적인 카메라 흔들기를 설정하되 가상 카메라를 타겟으로 하는 방법
Unity 2022.3.23f1(또는 그 이상)에서 새로운 프로젝트를 생성하고 패키지 매니저를 통해 Feel v4.1.2(또는 그 이상)를 가져옵니다.
패키지 매니저에서 Cinemachine을 가져옵니다.
새로운 빈 씬을 생성하고 큐브를 추가한 다음, 위치를 0,0,0으로 설정합니다.
새로운Cinemachine 가상 카메라를 생성하고 큐브를 볼 수 있도록 위치를 설정합니다.
가상 카메라의 Noise 설정에서 BasicMultiChannelPerlin을 선택하고, NoiseProfile을 6D Shake으로 설정한 다음, AmplitudeGain을 0으로, FrequencyGain을 0으로 설정합니다.
가상 카메라에MMCinemachineCameraShaker를 추가합니다.
빈 게임 오브젝트를 생성하고MMF Player를 추가합니다. Camera > Camera Shake 피드백을 추가합니다. CameraShakeProperties를 펼치고 모든 값을 다음과 같이 설정합니다: Duration: 0.3, Amplitude: 2, Frequency: 40.
에디터에서 재생 버튼을 누른 후, MMF Player 인스펙터에서 Play 버튼을 누릅니다.
기타 카메라 레시피
카메라 줌 피드백 설정 방법
Unity 2022.3.23f1(또는 그 이상)에서 새로운 프로젝트를 생성하고 패키지 매니저를 통해 Feel v4.1.2(또는 그 이상)를 가져옵니다.
새로운 빈 씬을 생성합니다.
큐브를 추가하고 위치를 0,0,0으로 설정합니다.
MainCamera를 선택하고 MMCameraZoom 컴포넌트를 추가합니다.
빈 게임 오브젝트를 생성하고 이름을 MyTestFeedbacks로 설정합니다. MMF Player 컴포넌트를 추가합니다.
Add new feedback 드롭다운을 통해 Camera > Camera Zoom 피드백을 추가합니다.
에디터에서 재생 버튼을 누르고, MyTestFeedbacks 오브젝트를 선택한 다음, MMF Player 인스펙터에서 녹색 재생 버튼을 누릅니다.
MMFader 및 페이드 피드백 설정 방법
Unity 2022.3.23f1(또는 그 이상)에서 새로운 프로젝트를 생성하고 패키지 매니저를 통해 Feel v4.1.2(또는 그 이상)를 가져옵니다.
새로운 빈 씬을 생성합니다.
옵션 1: 자동 셰이커 설정
씬에서 새로운 빈 오브젝트를 생성하고, MMF Player를 추가한 후, Camera > Fade 피드백을 추가합니다.
Automatic Setup 폴드아웃을 펼치고 Automatic Shaker Setup 버튼을 누릅니다.
에디터에서 재생 버튼을 누르고, MMF Player의 녹색 재생 버튼을 누릅니다.
옵션 2: 수동 설정
씬에 UI 이미지를 추가하고, RectTransform을 설정하여 화면 전체를 덮도록 설정합니다(보통 전체 스트레치와 좌/우/상/하 0으로 설정). 이미지 색상을 검정으로 설정합니다.
UI 이미지에 MMFader 컴포넌트를 추가합니다. 이는 CanvasGroup을 추가하고, 알파를 0으로 설정합니다.
씬에서 새로운 빈 오브젝트를 생성하고, MMF Player를 추가한 후, Camera > Fade 피드백을 추가합니다.
재생 버튼을 누르고 피드백을 재생하면 페이더가 페이드 인(화면을 검정으로 페이드)됩니다. FadeType을 Fade Out으로 변경하면 다시 정상으로 페이드 아웃됩니다. Fade 피드백의 인스펙터에서 설정(지속 시간, 곡선 등)을 원하는 대로 조정할 수 있습니다. 페이더가 둘 이상 있는 경우, 페이더와 피드백의 채널 ID가 일치하는지 확인하십시오.
화면 흔들기 비활성화
특정 유형의 피드백을 비활성화하는 방법
때때로 플레이어에게 어떤 유형의 피드백을 경험할지 제어할 수 있는 옵션을 제공하고 싶을 때가 있습니다. 예를 들어, 화면 흔들기를 줄이는 옵션을 제공하는 것이 일반적입니다. 이는 장애가 있는 사람들에게 문제가 될 수 있기 때문입니다. Feel을 사용하면 이를 매우 쉽게 할 수 있습니다!
Unity 2022.3.23f1(또는 그 이상)에서 새로운 프로젝트를 생성하고 패키지 매니저를 통해 Feel v4.1.2(또는 그 이상)를 가져옵니다.
Toaster 데모 씬을 엽니다.
프로젝트에 새로운 클래스를 생성하고, 이름을 `ImpulseDisabler`로 설정한 후, 내용을 다음으로 교체합니다:
using MoreMountains.FeedbacksForThirdParty;
using UnityEngine;
public class ImpulseDisabler : MonoBehaviour
{
public void DisableAllImpulses()
{
MMF_CinemachineImpulse.FeedbackTypeAuthorized = false;
}
public void EnableAllImpulses()
{
MMF_CinemachineImpulse.FeedbackTypeAuthorized = true;
}
}
씬에서 새로운 버튼을 생성합니다 (GameObject > UI > Button), 위치를 0,0,0으로 설정합니다 (예, 화면 중앙에 위치하지만 원하는 위치로 이동시켜도 됩니다).
새로 생성한 `ImpulseDisabler` 컴포넌트를 이 버튼에 추가합니다.
버튼 인스펙터에서, OnClick 섹션에 새 항목을 추가하고, `ImpulseDisabler` 컴포넌트를 해당 슬롯으로 드래그한 다음, `ImpulseDisabler.DisableAllImpulses` 함수를 선택합니다.
에디터에서 재생 버튼을 누르고, 씬의 사이드바에서 CM Impulse 버튼을 누르면 화면이 흔들립니다. 이제 생성한 버튼을 누른 다음 다시 CM Impulse 버튼을 누르면 더 이상 화면이 흔들리지 않습니다.
이렇게 하면 이제 한 줄의 코드로 모든 유형의 피드백을 비활성화(또는 활성화)할 수 있습니다. 모든 피드백에 대해 이렇게 할 수 있으며, 단순히 특정 유형을 타겟으로 설정하면 됩니다!