zoukankan      html  css  js  c++  java
  • Android中导入Unity项目,界面点击事件失去焦点问题


    ====================问题描述====================
    1.将Unity中的项目导出成Android项目,再放入到Eclipse中,然后新建一个Android项目,以Unity那个项目为类库。
    2.然后我开始写一个xml布局,布局中间是一个LinearLayout,上下分别是Button。LinearLayout用来放Unity里的内容。
    现在遇到的问题是如果再Unity画面加载完成之前,按钮的点击事件是可以执行的。当Unity加载完成以后,按钮就失效了。根本点不了。是因为Unity盖住了整个屏幕还是占据了整个焦点?现在不知道是应该在Unity代码里面改还是在Android里面改,有大神知道么?
    下面附上代码:
    package com.t.t;

    import com.unity3d.player.UnityPlayer;
    import com.unity3d.player.UnityPlayerNativeActivity;

    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.Toast;


    public class MainActivity extends UnityPlayerNativeActivity{

    private LinearLayout unity;

    private Button round,right,left;

    private String Tag="Unity3D";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //设置布局文件
    setContentView(R.layout.test);


    //mUnityPlayer为一个全局的引用变量,而且已 经在父类中设置好了,所以直接拿来用就可以了
    View playerView = mUnityPlayer.getView();
    //将Unity的视图添加到我们为其准备的父容器中
    unity = (LinearLayout) findViewById(R.id.unity);
    playerView.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Toast.makeText(MainActivity.this, "222222", Toast.LENGTH_LONG).show();
    }
    });

    unity.addView(playerView);

    round = (Button) findViewById(R.id.trun_round);
    round.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    UnityPlayer.UnitySendMessage("shouchengchangmaobing", "Answer", "3");

    }
    });
    left = (Button) findViewById(R.id.left);
    left.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    UnityPlayer.UnitySendMessage("shouchengchangmaobing", "Answer", "1");
    }
    });

    }
    }


    package com.t.t;

    import com.unity3d.player.*;
    import android.app.NativeActivity;
    import android.content.res.Configuration;
    import android.graphics.PixelFormat;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.MotionEvent;
    import android.view.Window;
    import android.view.WindowManager;

    public class UnityPlayerNativeActivity extends NativeActivity
    {
    protected UnityPlayer mUnityPlayer;// don't change the name of this variable; referenced from native code

    // Setup activity layout
    @Override 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);

    setContentView(mUnityPlayer);
    mUnityPlayer.requestFocus();
    }

    // Quit Unity
    @Override protected void onDestroy ()
    {
    mUnityPlayer.quit();
    super.onDestroy();
    }

    // Pause Unity
    @Override protected void onPause()
    {
    super.onPause();
    mUnityPlayer.pause();
    }

    // Resume Unity
    @Override protected void onResume()
    {
    super.onResume();
    mUnityPlayer.resume();
    }

    // This ensures the layout will be correct.
    @Override public void onConfigurationChanged(Configuration newConfig)
    {
    super.onConfigurationChanged(newConfig);
    mUnityPlayer.configurationChanged(newConfig);
    }

    // Notify Unity of the focus change.
    @Override public void onWindowFocusChanged(boolean hasFocus)
    {
    super.onWindowFocusChanged(hasFocus);
    mUnityPlayer.windowFocusChanged(hasFocus);
    }

    // For some reason the multiple keyevent type is not supported by the ndk.
    // Force event injection by overriding dispatchKeyEvent().
    @Override public boolean dispatchKeyEvent(KeyEvent event)
    {
    if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
    return mUnityPlayer.injectEvent(event);
    return super.dispatchKeyEvent(event);
    }

    // Pass any events not handled by (unfocused) views straight to UnityPlayer
    @Override public boolean onKeyUp(int keyCode, KeyEvent event)     { return mUnityPlayer.injectEvent(event); }
    @Override public boolean onKeyDown(int keyCode, KeyEvent event)   { return mUnityPlayer.injectEvent(event); }
    @Override public boolean onTouchEvent(MotionEvent event)          { return mUnityPlayer.injectEvent(event); }
    /*API12*/ public boolean onGenericMotionEvent(MotionEvent event)  { return mUnityPlayer.injectEvent(event); }
    }


    <?xml version="1.0" encoding="utf-8"?>  
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent"  
        android:orientation="vertical" >  
      
        <Button  
            android:id="@+id/trun_round"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_alignParentTop="true"  
            android:text="around" />  
      
        <LinearLayout
            android:id="@+id/unity"
            android:layout_width="100dp"
            android:layout_height="200dp"
            android:layout_below="@+id/trun_round"
            android:background="#ccffcc"
            android:orientation="horizontal" >
      
        </LinearLayout>  
      
        <Button  
            android:id="@+id/left"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:layout_alignParentBottom="true"
            android:text="left" />  
      
    </RelativeLayout>  

    ====================解决方案1====================
    Unity盖住了整个屏幕???
    按钮可见能点击不?
  • 相关阅读:
    MGR集群中节点间数据一致性如何检查?
    MySQL错误日志出现 [Note] InnoDB: Discarding tablespace of table db.table: Data structure corruption产生可能的原因及解决办法?
    Redis中如何发现并优化生产环境的big key?
    HashHelper
    设计模式-结构型-组合模式
    设计模式-结构型-享元模式
    设计模式-结构型-外观模式
    泛型Generic
    Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
    设计模式-结构型-装饰者模式
  • 原文地址:https://www.cnblogs.com/lianxu61/p/4000517.html
Copyright © 2011-2022 走看看