Android中导入Unity项目,界面点击事件失去焦点问题

移动开发 码拜 8年前 (2017-04-28) 2349次浏览
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>
解决方案

100

Unity盖住了整个屏幕?
按钮可见能点击不?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Android中导入Unity项目,界面点击事件失去焦点问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)