Вызываю из Unity через плагин Java код, который запускает вибрацию.
Код в Unity
public void VibroOn()
{
AndroidJavaClass pluginClass = new
AndroidJavaClass("com.freebacon.poosh.UnityVibroManager");
pluginClass.CallStatic("Vibratethis");
txt.text = " vibroo";
}
Java код в плагине, до которого всё доходит.
public static void Vibratethis()
{
Activity currentActivity = UnityPlayer.currentActivity;
Vibrator am = (Vibrator)currentActivity.getSystemService(Context.VIBRATOR_SERVICE);
am.vibrate(2000L);
}
Пока всё статик - всё отлично работает. Но стоит мне сделать так
Unity
public void VibroOn()
{
AndroidJavaClass pluginClass = new
AndroidJavaClass("com.freebacon.poosh.UnityVibroManager");
pluginClass.Call("Vibratethis");
txt.text = " vibroo";
}
Java
public void Vibratethis()
{
Activity currentActivity = UnityPlayer.currentActivity;
Vibrator am = (Vibrator)currentActivity.getSystemService(Context.VIBRATOR_SERVICE);
am.vibrate(2000L)
}
(убрал static в методе и вызове метода)
Теперь это не работает! Т.е. когда я вызываю в Unity
pluginClass.CallStatic("Vibratethis");
Он активирует статичный метод в Java.
public static void Vibratethis()
А когда вызываю
pluginClass.Call("Vibratethis");
Он не вызывает НЕстатичный метод в Java
public void Vibratethis()
Компиляторы не в Unity, не в Android Studio не выводят ошибок, в чем же дело и как решить?
Создайте в java классе статичный метод, который создает и возвращает экземпляр класса (getObject).
Java
public class UnityVibroManager{
...
public void Vibratethis(){
...
}
...
public static UnityVibroManager getObject(){
return new UnityVibroManager();
}
...
}
Затем получайте этот объект в C# коде и вызывайте у него необходимые методы.
Unity C#
public AndroidJavaObject object = pluginClass.CallStatic<AndroidJavaObject>("getObject");
object.Call("Vibratethis");
Но я считаю, для функции вибрации подходит static метод, либо синглтон
Сборка персонального компьютера от Artline: умный выбор для современных пользователей