# Unity에서 버튼 클릭 시 햅틱(진동) 피드백 적용하기 (iOS & Android)
모바일 앱에서 햅틱 피드백(진동 효과)은 UX 향상에 중요한 요소입니다. Unity에서는 기본적으로 Handheld.Vibrate()를 제공하지만, 세밀한 햅틱 효과를 위해 플랫폼별로 다른 방법을 사용해야 합니다. 이 글에서는 Unity에서 iOS 및 Android에서 버튼 클릭 시 햅틱을 적용하는 방법을 완벽하게 정리하겠습니다.
1. 프로젝트 준비
✅ Unity 프로젝트에서 햅틱 기능을 구현하기 위해 필요한 것
- Unity 2020 이상 권장
- Android 8.0 이상 & iOS 10 이상 지원
- AndroidJavaObject를 사용한 Android 진동 API
- Objective-C를 활용한 iOS 네이티브 햅틱 지원
- Assets/Plugins/iOS/ 폴더에 HapticFeedback.m 추가 필요
2. Android에서 햅틱 효과 구현
Android에서는 Handheld.Vibrate()가 기본적으로 제공되지만, 더 세밀한 햅틱 피드백을 원한다면 VibrationEffect를 사용해야 합니다.
✅ 기본적인 Android 햅틱 (약한 진동)
using UnityEngine;
public class HapticFeedback : MonoBehaviour
{
public void TriggerBasicHaptic()
{
#if UNITY_ANDROID
Handheld.Vibrate();
#endif
}
}
✅ 강한 햅틱 효과 (Android 8.0 이상 지원)
using UnityEngine;
public class HapticFeedback : MonoBehaviour
{
public void TriggerStrongHaptic()
{
#if UNITY_ANDROID
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject vibrator = currentActivity.Call<AndroidJavaObject>("getSystemService", "vibrator");
vibrator.Call("vibrate", 100); // 100ms 동안 진동
#endif
}
}
⚠️ 주의점
✅ AndroidManifest.xml에서 VIBRATE 권한 추가 필요
<uses-permission android:name="android.permission.VIBRATE"/>
✅ Android 8.0(Oreo) 이상에서는 VibrationEffect를 지원하지만, 이전 버전에서는 기본 진동만 지원
3. iOS에서 햅틱 효과 구현 (Taptic Engine 활용)
iOS에서는 Handheld.Vibrate()가 작동하지 않으므로 Taptic Engine을 사용해야 합니다.
✅ iOS 네이티브 코드 추가 (Assets/Plugins/iOS/HapticFeedback.m)
#import <UIKit/UIKit.h>
extern "C" {
void TriggeriOSHaptic(int type)
{
UIImpactFeedbackGenerator *generator;
switch (type) {
case 1:
generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight];
break;
case 2:
generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
break;
case 3:
generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleHeavy];
break;
default:
generator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
break;
}
[generator prepare];
[generator impactOccurred];
}
}
✅ iOS에서 C# 코드에서 호출하기
using System.Runtime.InteropServices;
using UnityEngine;
public class HapticFeedback : MonoBehaviour
{
[DllImport("__Internal")]
private static extern void TriggeriOSHaptic(int type);
public void VibrateIOS(int type = 1)
{
#if UNITY_IOS
TriggeriOSHaptic(type); // 1: Light, 2: Medium, 3: Heavy
#endif
}
}
⚠️ 주의점
✅ Assets/Plugins/iOS/ 폴더가 없으면 생성 후 HapticFeedback.m을 추가해야 함 ✅ TriggeriOSHaptic()을 호출할 때 UNITY_IOS 매크로를 반드시 포함해야 함 ✅ iOS 시뮬레이터에서는 작동하지 않음! 반드시 iPhone 실기기에서 테스트 필요
4. Unity UI 버튼 클릭 시 햅틱 실행
using UnityEngine;
using UnityEngine.UI;
public class ButtonHaptic : MonoBehaviour
{
public Button myButton;
private HapticFeedback hapticFeedback;
void Start()
{
hapticFeedback = GetComponent<HapticFeedback>();
myButton.onClick.AddListener(() => hapticFeedback.VibrateIOS(2)); // iOS Medium 햅틱 실행
}
}
✅ 이제 버튼을 클릭하면 iOS & Android에서 햅틱 피드백이 실행됩니다.
5. 최종 테스트 및 Xcode 설정 확인
1️⃣ Unity에서 iOS 빌드 실행 (Build & Run) 2️⃣ Xcode에서 프로젝트 열기 3️⃣ Target → UnityFramework → Build Phases → Compile Sources
- HapticFeedback.m이 포함되어 있는지 확인 (없다면 직접 추가) 4️⃣ iPhone 실기기에서 실행하여 햅틱 테스트
🚀 최종 결론
✅ Android에서는 Handheld.Vibrate() 또는 VibrationEffect를 활용하여 햅틱 효과 추가 가능 ✅ iOS에서는 UIImpactFeedbackGenerator를 사용하여 네이티브 방식으로 햅틱 제공해야 함 ✅ 버튼 클릭 시 TriggerHaptic()을 호출하면 플랫폼에 따라 적절한 햅틱 효과 실행됨 ✅ iOS에서는 반드시 실기기에서 테스트해야 함! 시뮬레이터에서는 동작하지 않음
이제 Unity에서 완벽한 햅틱 효과를 구현할 수 있습니다! 🚀
'Unity' 카테고리의 다른 글
iOS ATT(App Tracking Transparency) 설정, 광고 추적 문제 해결 가이드 (0) | 2025.02.25 |
---|---|
Unity에서 CocoaPods를 인식하지 못하는 문제 해결: macOS 기본 Ruby 문제 해결 방법 (0) | 2025.02.21 |
유니티에서 다국어 지원을 위한 TMP 폴백 폰트 설정법 (0) | 2025.02.17 |
Unity에서 Google Sheets API(OAuth 2.0)를 적용하여 스프레드시트 공유 없이 안전하게 데이터 가져오는 방법 (0) | 2025.02.17 |
유니티 UI 오브젝트 위치 이동 시 부모가 다를 때 정확히 위치 맞추는 방법 (0) | 2025.02.04 |