この記事の要旨
iOS/Androidのそれぞれで、スマホをバイブさせる実装を行う。参考記事
基本的に以下のQiitaを読めばわかる人にはわかるんだと思います。なので、ド初心者の自分が詰まったところを中心に紹介。 https://qiita.com/mrhdms/items/3201baf851a91875fa29Unityでモバイル端末のバイブレーションをコントロールする
iOS向けの実装
1 2 3 4 5 6 7 8 9 10 11 12 |
IOSUtil.cs #if UNITY_IOS && !UNITY_EDITOR [DllImport ("__Internal")] static extern void _playSystemSound(int n); #endif public static void PlaySystemSound(int n) //引数にIDを渡す { #if UNITY_IOS && !UNITY_EDITOR _playSystemSound(n); #endif } |
1 |
using System.Runtime.InteropServices; |
1 2 3 4 5 6 7 8 |
IOSUtil.mm #import <Foundation/Foundation.h> #import <AudioToolBox/AudioToolBox.h> extern "C" void _playSystemSound (int soundId) { AudioServicesPlaySystemSound(soundId); } |
するとこのファイルをXCodeで編集できるようになったので、上記のコードをコピペし、UnityプロジェクトのAssets>Plugins>iOSに、適当な名前を付けて保存しておきます。
以上でiOSの方はおしまいです。実機にビルドしてみれば、呼び出しのタイミングでスマホがぶるっと震えることを確認できました。
Android向けの実装
AndroidはiOSに比べるとシンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
AndroidUtil.cs using System.Collections; using System.Collections.Generic; using UnityEngine; public static class AndroidVibrator { #if UNITY_ANDROID && !UNITY_EDITOR public static AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); public static AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); public static AndroidJavaObject vibrator = currentActivity.Call<AndroidJavaObject>("getSystemService", "vibrator"); #else public static AndroidJavaClass unityPlayer; public static AndroidJavaObject currentActivity; public static AndroidJavaObject vibrator; #endif public static void Vibrate(long milliseconds) { if (isAndroid()) vibrator.Call("vibrate", milliseconds); else Handheld.Vibrate(); } private static bool isAndroid() { #if UNITY_ANDROID && !UNITY_EDITOR return true; #else return false; #endif } } |
おわり!
めちゃ助かります。
嬉しい記事には広告ポチポチします。