Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要使用Unity3D在Java中使用本机Android活动和touchevents_Java_Android_Android Layout_Android Ndk_Unity3d - Fatal编程技术网

需要使用Unity3D在Java中使用本机Android活动和touchevents

需要使用Unity3D在Java中使用本机Android活动和touchevents,java,android,android-layout,android-ndk,unity3d,Java,Android,Android Layout,Android Ndk,Unity3d,我正在使用Unity并将Unity项目导出为eclipse项目 这将产生一个简单的本地应用程序 public class UnityPlayerNativeActivity extends NativeActivity { protected UnityPlayer mUnityPlayer; protected void onCreate (Bundle savedInstanceState) { requestWindowFeature(Window.

我正在使用Unity并将Unity项目导出为eclipse项目

这将产生一个简单的本地应用程序

public class UnityPlayerNativeActivity extends NativeActivity
{
    protected UnityPlayer mUnityPlayer;    
protected void onCreate (Bundle savedInstanceState)
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        getWindow().takeSurface(null);
        setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
        getWindow().setFormat(PixelFormat.RGB_565);

        mUnityPlayer = new UnityPlayer(this);
        if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true))
            getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                   WindowManager.LayoutParams.FLAG_FULLSCREEN);

        int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1);
        boolean trueColor8888 = false;
        mUnityPlayer.init(glesMode, trueColor8888);

    Button b = new Button(this);
        b.setOnClickListener( new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "Hello From Java", ).show();                }   });

        RelativeLayout layout = (RelativeLayout) View.inflate(this, R.layout.layout, null);
        layout.setLayoutParams(new LayoutParams(300,30));
        layout.addView(b);

        mUnityPlayer.addView(layout);
        View playerView = mUnityPlayer.getView();
        setContentView(playerView);
正如你们所看到的,我在unity布局的顶部添加了一个相对膨胀的元素

但是,由于Unity驻留在本机代码中,并且该类是一个本机活动 我的按钮的触摸事件在Java中不起作用- 由于Unity编译成DLL,因此我无法访问本机代码(通过JNI)将触摸事件发送回Java

还有别的办法吗? 如何在Java中触发touch事件?或者,我如何编写本机活动的扩展来捕获NDK中的触摸事件,以便将它们传递给java

我发现有趣的是,如果我不使用unity视图,而只是将ContentView设置为我自己的布局,那么触摸事件在java端确实可以工作
但是,第二次我使用unity视图时,我不能再使用java中的触摸事件了,我已经做得很好了,问题是android需要将元数据添加到xml清单中,以告诉unity将事件传递给dalvik

请参见UnityPlayerActivity