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盖住了整个屏幕???
    按钮可见能点击不?
  • 相关阅读:
    【原创】项目管理软件之争,禅道和JIRA大对比
    互联网大数据下渐渐被人遗忘的数据安全隐患
    然之和今目标办公系统软件功能大对比
    企业如何在办公系统中实践阿米巴
    企业在建站前需要了解的七点
    一个好的网站设计如何影响内容营销
    前端设计师必须知道的10个重要的CSS技巧
    为什么用CDN给你网站加速?
    超实用!网站导航栏设计方法总结
    作为新手,SEO要避免的五大误区
  • 原文地址:https://www.cnblogs.com/lianxu61/p/4030394.html
Copyright © 2011-2022 走看看