初めに
作成したゲームの動作がおかしく、調査した時に、Androidのネイティブコード周りで問題が発生していました。
バイブ処理の影響で正常に動作しなくなっていました。
引数の型について
ネイティブのコードを呼び出す際は、引数の型を正しい物にしないと、エラーが発生する可能性があります。
例)バイブの実行
Androidのvibrate
を呼び出す例です。
引数には、long型の数字を指定する事が必要です。
vibrator.Call("vibrate", 100);
上記の場合、数字の型を指定していませんので、UnityのデフォルトのInt32になってしまい、バイブ実行時にエラーが発生してしまいます。
long setNum2 = 100;
vibrator.Call("vibrate", setNum2);
上記のように、long型の変数に格納して、呼び出すことで、正常に実行する事が出来ます。
ネイティブコードの権限について
ネイティブコードの処理を実行するために、Androidのマニュフェストファイルに権限を追加する必要があります。
例)バイブレーションを実行する際
UnityEngineのVibrate処理UnityEngine.Handheld.Vibrate();
を呼び出した際は、Androidマニュフェストファイルへ自動的で下記のような内容が追記されます。
<uses-permission android:name="android.permission.VIBRATE"/>
下記のコードのように、UnityEngineのVibrate処理を一切利用せずにネイティブ側のバイブ処理を呼び出す際は、自身でマニュフェストファイルへ追記する必要があります。
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");
void vibtrate(){
long setNum1 = 100;
vibrator.Call("vibrate", setNum1);
}