Статик методы и не статик, Java и Unity

404
03 апреля 2017, 05:15

Вызываю из 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 не выводят ошибок, в чем же дело и как решить?

Answer 1

Создайте в 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 метод, либо синглтон

READ ALSO
Как в WebGL приложении отправлять запросы?

Как в WebGL приложении отправлять запросы?

Насколько я понимаю, обычные HTTP запросы не подходят для этогоПоискав в Интернете, наткнулся на WebSocket, но не совсем понятно как его использовать

256
Выбор NoSQL с моделью данных key-value для работы в .NET

Выбор NoSQL с моделью данных key-value для работы в .NET

Провожу обзор NoSQL баз с моделью данных key-value для работы под платформойNet, а именно C#

264
Перегрузка операторов в С#

Перегрузка операторов в С#

Помогите решить задачу на Перегрузку операций

325