#c# #unity3d #android-unity-plugin
#c# #unity3d #android-unity-plugin
Вопрос:
У меня есть этот метод Java
public class Test {
double calculate(float[] array){
array[0] = 2.0f;
return 3.0f;
}
}
Я интегрировал этот метод Java через архив Android в Unity. Я получаю доступ к этому методу следующим образом:
var javaObject = new AndroidJavaObject("Test");
float[] inOut = new float[1];
double res = javaObject.Call<double>("calculate", inOut);
Теперь переменная res содержит значение 3.0f, как и ожидалось. Но у массива inOut все еще есть 0 в позиции индекса 0, но он должен иметь 2.0f;
Как мне правильно передать массив примитивов в Java-код из Unity и использовать его в качестве аргумента «inOut»?
Спасибо
Комментарии:
1. Что ж, вам следует переосмыслить свой код. Массив с плавающей запятой передается как копия, поэтому изменяется только копия, в то время как исходный массив inOut остается неизменным. Возможно, вам следует создать 2 метода, один из которых возвращает double, а другой — возвращает массив. Конечно, я не знаю, каков ваш вариант использования и чего именно вы пытаетесь достичь.
2. Насколько я знаю, как Java, так и C # используют «Вызов по ссылке». Таким образом, объект (= float[]) Я перехожу к методу, который не должен копироваться, а использоваться напрямую. Я проверил это поведение с помощью быстрого теста как на C #, так и на Java.
3. Очевидно, что в этой ситуации этого не происходит. При обмене данными между C # и Java вы получаете копию. Я не уверен, есть ли способ сделать то, что вы хотите, но есть четкие решения для его обхода.