我是靠谱客的博主 明亮跳跳糖,最近开发中收集的这篇文章主要介绍Unity 通过JNI传递数组到AndroidUnity 通过JNI传递数组到Android,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Unity 通过JNI传递数组到Android
- 项目中有一个需求就是获得Unity端的某个物体的位置,然后传递给Android端.
- 需要借助
JNI
Unity端代码:
public class TestArrayThroughJNI
{
private static AndroidJavaObject _plugin;
static GPlayIABPlugin()
{
if( Application.platform != RuntimePlatform.Android )
return;
//This is apparently good practice, but seems to have no effect anyways!
AndroidJNI.AttachCurrentThread();
// find the plugin instance
using (var pluginClass = new AndroidJavaClass("com.company.myplugin"))
_plugin = pluginClass.CallStatic<AndroidJavaObject>( "instance" );
}
public static void PassArrayToJava()
{
float[] testFltArray = {1.5f, 2.5f, 3.5f, 3.6f};
IntPtr jAryPtr = AndroidJNIHelper.ConvertToJNIArray(testFltArray);
jvalue[] blah = new jvalue[1];
blah[0].l = jAryPtr;
IntPtr methodId = AndroidJNIHelper.GetMethodID(_plugin.GetRawClass(), "testArrayFunction");
AndroidJNI.CallVoidMethod(_plugin.GetRawObject(), methodId, blah);
}
}
Android端代码:
public class JavaTestArray
{
//Used by Unity to grab the instance of this Java class.
private static IABUnityPlugin _instance;
//Magic happens here.
public void testArrayFunction(float[] test)
{
Log.i("Unity", "Float[]: " + test + " and length: " + test.length);
for(int i = 0; i < test.length; i++)
{
Log.i("Unity", "[" + i + "] " + test[i]);
}
}
public static JavaTestArray instance()
{
if(_instance == null)
_instance = new JavaTestArray();
return _instance;
}
}
结果:
Output:
Float[]: [F@405608d0 and length: 4
[0] 1.5
[1] 2.5
[2] 3.5
[3] 3.6
参考文献
Passing arrays through the JNI
最后
以上就是明亮跳跳糖为你收集整理的Unity 通过JNI传递数组到AndroidUnity 通过JNI传递数组到Android的全部内容,希望文章能够帮你解决Unity 通过JNI传递数组到AndroidUnity 通过JNI传递数组到Android所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复