K
K
key don2017-04-22 03:17:16
Java
key don, 2017-04-22 03:17:16

How to call C# code from java in Unity3D?

How to call C# functions from java?
I did not find suitable plugins for midi support, I have to write my own.
The Android API actively uses callbacks, which should call methods asynchronously, in this case, these methods are in C #.
Also, midi commands will need to be transferred to C# code.
Googled the following options:
1) use 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) use AndroidJavaProxy
spoiler
примеры которые нашел запутаны, кроме того не уверен можно ли его использовать для переопределения методов java классов, а не интерфейсов.
Пытался таким кодом, который не работает
C#
public class DeviceCallback : AndroidJavaProxy
    {
        public DeviceCallback() : base("android.media.midi.MidiManager.DeviceCallback") { }

        void onDeviceAdded(AndroidJavaObject info)
        {
                    Debug.Log("TEST!!!!!!!!!");
        }
    }

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question