Задать вопрос
keydon2
@keydon2
...

Как в Unity3D вызывать C# код из java?

Как вызывать C# функции из java?
Не нашел годных плагинов для поддержки midi, приходится свой писать.
В API Android активно юзаются callback, которые асинхронно должны вызывать методы, в данном случае эти методы на C#.
Также и команды midi надо будет передавать в C# код.
Нагуглил следующие варианты:
1)использовать unitysendmessage
spoiler
C#
public class PluginWrapper : MonoBehaviour {
...
void Update () {
        AndroidJavaObject device = plugin.CallStatic<AndroidJavaObject>("getDevice", midiManager, 1);
        Debug.Log("UPDATE!!!!!!!!!");
	}

    void ApplyDamage(string str)
    {
        Debug.Log("TEST!!!!!!!!!" + str);
    }
}

Скрипт присоединен компонентом к gameobject Text, который присоединен к Canvas.
Каждый кадр должен вызываться Update(), который будет вызывать getDevice, который будет вызывать ApplyDamage().
java:
public static MidiDeviceInfo getDevice(MidiManager m, int num){
        UnityPlayer.UnitySendMessage ("PluginWrapper", "ApplyDamage", "Message to send teststr");
        return m.getDevices()[num];
    }

UPDATE в логе выводится, TEST нет, getDevice вызывается. Значит не доходит message. Почему? Правильно я пишу первый аргумент? Мб не находится PluginWrapper?


2) использовать AndroidJavaProxy
spoiler
примеры которые нашел запутаны, кроме того не уверен можно ли его использовать для переопределения методов java классов, а не интерфейсов.
Пытался таким кодом, который не работает
C#
public class DeviceCallback : AndroidJavaProxy
    {
        public DeviceCallback() : base("android.media.midi.MidiManager.DeviceCallback") { }

        void onDeviceAdded(AndroidJavaObject info)
        {
                    Debug.Log("TEST!!!!!!!!!");
        }
    }
  • Вопрос задан
  • 538 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы