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

雷杰-- 2014-09-10 09:52:35
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>
...全文
1973 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
bn030514 2017-05-02
  • 打赏
  • 举报
回复
ronson01的答案是正解
Wenbooboo 2017-01-18
  • 打赏
  • 举报
回复
引用 12 楼 crazy1235 的回复:
我遇到的问题是:按钮的焦点错位了,可以触发事件,但是不再按钮上,在其他的位置!! 请教楼主怎么解决的!????
请问前辈这问题解决了吗 我现在遇到这个问题了 想请教下,谢谢!
小小背包郎 2016-09-28
  • 打赏
  • 举报
回复
楼主问题是怎么解决的啊,是否将unity的view中焦点下放
SpringInDawn 2015-07-02
  • 打赏
  • 举报
回复
你好,请问这个问题最终解决了吗?谢谢
Alanqiuz 2015-06-30
  • 打赏
  • 举报
回复
问题解决了吗???你们做也是做vr这个块的??还是 其他的
ronson01 2014-11-24
  • 打赏
  • 举报
回复
解决方法是在AndroidManifest.xml文件中的activity子节点下增加如下两行代码: <meta-data android:name="android.app.lib_name" android:value="unity" /> <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
月盡天明 2014-10-24
  • 打赏
  • 举报
回复
怎么没人回复你的问题啊!! 我也遇到了这个问题! 还没有解决呢!!!
月盡天明 2014-10-23
  • 打赏
  • 举报
回复
我按照楼主的步骤,怎么运行android项目的时候 ,出错,运行不起来! 提示我:the application xxx has stopped unexceptedly...... 请问楼主怎么回事???
月盡天明 2014-10-23
  • 打赏
  • 举报
回复
我遇到的问题是:按钮的焦点错位了,可以触发事件,但是不再按钮上,在其他的位置!! 请教楼主怎么解决的!????
Gavin_Mirror 2014-10-22
  • 打赏
  • 举报
回复
给你看一个我的博客 http://blog.csdn.net/jiguangcanhen/article/details/40339381
零零零壹 2014-10-11
  • 打赏
  • 举报
回复
解决了吗,我的问题和你一样唉
天煞魔猎手 2014-09-23
  • 打赏
  • 举报
回复
小弟大概了解了下: ## unity3d anroid sdk 嵌入有两种方法 --- 1. 在android项目中写好所有api,然后生成jar,导入到u3d项目中,让u3d的脚本逻辑调用这些api 2. unity3d项目中写好所有事件触发,然后在android项目中捕捉这些事件,然后实现里面的逻辑 楼主的应该是采用第一种方法,而第一种方法的弊端就是你不能使用所有布局控件,因为unity3d不会传递触摸事件到这些布局中的,解决方法:采用WindowManager来代替Layout来实现布局,然后采用WindowManager来展示
dongzhi1129 2014-09-23
  • 打赏
  • 举报
回复
请问你的问题解决了么?我也跟你一样的问题
雷杰-- 2014-09-10
  • 打赏
  • 举报
回复
引用 5 楼 sagittarius1988 的回复:
[quote=引用 4 楼 Crazy9599 的回复:] [quote=引用 2 楼 sagittarius1988 的回复:] Unity盖住了整个屏幕??? 按钮可见能点击不?
按钮可见,点击不了,不知道是否是盖住了整个屏幕,我试了三种布局,FrameLayout、LinearLayout、RelativeLayout都不可以,感觉可能是焦点的问题,Unity那部分本身的触摸事件,点击事件也触发不了。[/quote] 改布局
<?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" />  
   
    <Button  
        android:id="@+id/left"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"
        android:text="left" />
    
    <LinearLayout
        android:id="@+id/unity"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_below="@id/trun_round"
        android:layout_above="@id/left"
        android:background="#ccffcc"
        android:orientation="horizontal" >
   
    </LinearLayout>  
   
      
   
</RelativeLayout>  
[/quote]跟布局没啥关系吧,这布局还要怎么改?三种基本的我都试过了。都没用。
sagittarius1988 2014-09-10
  • 打赏
  • 举报
回复
引用 4 楼 Crazy9599 的回复:
[quote=引用 2 楼 sagittarius1988 的回复:] Unity盖住了整个屏幕??? 按钮可见能点击不?
按钮可见,点击不了,不知道是否是盖住了整个屏幕,我试了三种布局,FrameLayout、LinearLayout、RelativeLayout都不可以,感觉可能是焦点的问题,Unity那部分本身的触摸事件,点击事件也触发不了。[/quote] 改布局
<?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" />  
   
    <Button  
        android:id="@+id/left"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"
        android:text="left" />
    
    <LinearLayout
        android:id="@+id/unity"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_below="@id/trun_round"
        android:layout_above="@id/left"
        android:background="#ccffcc"
        android:orientation="horizontal" >
   
    </LinearLayout>  
   
      
   
</RelativeLayout>  
雷杰-- 2014-09-10
  • 打赏
  • 举报
回复
引用 2 楼 sagittarius1988 的回复:
Unity盖住了整个屏幕??? 按钮可见能点击不?
按钮可见,点击不了,不知道是否是盖住了整个屏幕,我试了三种布局,FrameLayout、LinearLayout、RelativeLayout都不可以,感觉可能是焦点的问题,Unity那部分本身的触摸事件,点击事件也触发不了。
雷杰-- 2014-09-10
  • 打赏
  • 举报
回复
引用 1 楼 Crazy9599 的回复:
没人吗?自己顶,求大神,求解决~
按钮可见,点击不了,不知道是否是盖住了整个屏幕,我试了三种布局,FrameLayout、LinearLayout、RelativeLayout都不可以,感觉可能是焦点的问题,Unity那部分本身的触摸事件,点击事件也触发不了。
sagittarius1988 2014-09-10
  • 打赏
  • 举报
回复
Unity盖住了整个屏幕??? 按钮可见能点击不?
雷杰-- 2014-09-10
  • 打赏
  • 举报
回复
没人吗?自己顶,求大神,求解决~
这是个神奇的东西哦 投篮辅助器 让投篮更准 锋?三分不是问题 百分百!! 【招】应届生,入职年薪5-10万 【有奖】嵌入式开发从业人员大调查 SAP D-Code大会最低折扣倒计时 2013年热门Android应用 Android 游戏教程:让人物动起来 跟燕青一起学Android应用开发 .. 相关资源 AgileEAS.NET SOA 平台简易教程 50个Div+CSS模板 圣诞程序雪花飞舞的世界(VC++) C#5.0语法范例 读懂C++递归程序 c++ 类 的初步讨论 云计算资料大全(了解云计算者必读).pdf 云计算术语大全.docx Eclipse快捷键大全 五种令人印象深刻的网页头部设计技巧 C++初步知识(2013级-C++程序设计) 拼图游戏代码 碎纸片的拼接复原算法集合 java笔试题大集合及答案 热门招聘 【上海斐讯数据】招聘JAVA工程师 【德邦物流】高薪诚聘 软件质量工程师 【移动】车联网产业研究员 【移动】核心网或承载接入网 【移动】行业市场研究员 【移动】互联网运营经理 【移动】服务器技术研究员 【移动】产品体验设计师 JAVA软件开发工程师 月薪15000 C++/C# 软件开发工程师 月薪15000 技术总监- 武汉 月薪30000 android 开发工程师 月薪20000 高级算法工程师 月薪30000 地图导航上市公司 产品经理 月薪20000 【上海斐讯数据】招聘JAVA工程师 【德邦物流】高薪诚聘 软件质量工程师 【移动】车联网产业研究员 【移动】核心网或承载接入网 【移动】行业市场研究员 【移动】互联网运营经理 【移动】服务器技术研究员 【移动】产品体验设计师 JAVA软件开发工程师 月薪15000 C++/C# 软件开发工程师 月薪15000 技术总监- 武汉 月薪30000 android 开发工程师 月薪20000 高级算法工程师 月薪30000 地图导航上市公司 产品经理 月薪20000 电信下载网通下载 VIP免积分下载 你目前积分:0,下载后评论将有机会获得返分。 . FAQ为什么我点的下载下不了,但积分却被扣了由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。我的积分不多了,如何获取积分?上传优质资源可以获取积分,详细见 积分规则。 选择完成有奖的任务,可以获取积分。 http://task.csdn.net 选择购买VIP会员服务,无需积分下载资源 。 http://vip.csdn.net 评价资源返积分: 立即评价 第一次绑定手机,将获50下载积分及100论坛可用分。 立即绑定 论坛可用分兑换下载积分。 立即兑换 下载资源意味着您已经同意遵守以下协议1. 资源的所有权益归上传用户所有2. 未经权益所有人同意,不得将资源的内容挪作商业或盈利用途3. CSDN下载频道仅提供交流平台,并不能对任何下载资源负责4. 下载资源如有侵权或不适当内容,请与我们联系。5. 本站不保证本站提供的资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。 下载频道公告. 做任务,得下载分 微软必应-英雄会在线编程 欢迎订阅CSDN社区周刊 . 本周热点资源. android4高级编程(文) C#开发Android应用实战 使用Mono for Android和.NET C# PDF扫描版 仿新版360安全卫士主界面(基于稍作修改的duilib) C/C++指针经典资料大全 Android动画效果集合开源APP JAVA面试题目 Excel导入导出测试程序,测试通过 Unity 4.x从入门到精通 官方教材 完整版地址.rar 站群工具结合包 C#高性能大容量SOCKET并发完成端口例子 . 课程资源热门Tag. 软件测试 matlab loadrunner 测试 软件工程 qtp 教程 破解 性能测试 软件 .. . 关闭 积分不够,先来了解

80,363

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧