unity3d下载按键无法识别

 这两天为解决unity3d下载3d与android项目整合中絀现的无法监听真机back实体键的问题找了很多资料网上也有很多人遇到了这个问题,但是似乎都没找到有效的解决方法

   实现的效果是从A_Activity跳转到unity3d下载PlayerNativeActivity,传入参数加载对应的三维图按返回键或home键分别返回上一个activity和返回桌面。默认情况下按home键会返回桌面但是按back键则无法监听箌,没有任何反应

   unity3d下载PlayerNativeActivity这个类的加载速率据说会比较快,系统版本要求2.3以上之前也一直用这个类整合使用。但是这两天在使用这个类時一直没法解决实体按键事件的问题具体可以看下这段介绍:

2.3),老的android版本没有这个特性因为在NativeActivity中,触摸事件都是在native代码中处理的java视圖正常情况下是无法获取这些事件的,不过在unity3d下载3d中有允许将事件传到DalvikVM的转发机制,要应用这个转发机制必须修改manifest文件如下:


   另有一種办法是可以在jni脚本文件里监听到实体按键,可以在脚本文件里对按键事件进行处理不过针对返回键只有一个方法可以调用,即Application.Quit();但是这個方法会退出整个application按下返回键后,三维图页面退出了同时其他页面也闪退了,无法返回到上一个activity的页面


   于是改用unity3d下载PlayerActivity这个类进行尝試,通过测试终于发现可以直接在这个类里监听到按键但是却无法识别按键。

   只要有按键被按下这三个方法都能执行,包括音量键等但是只能监听到按键事件,却无法识别是否按下的是返回键还是菜单键。加上KeyCode.Escape或者KeyCode.Back都无效用onBackPressed()方法也仍然无效。网上很多一样的问题却没有有效的答案。

找不到确切的解决办法决定改变思路再尝试下。原先的unity3d下载PlayerActivity保持不变参数传入的接收和处理仍然在这个类里进荇,自己再创建一个类来继承unity3d下载PlayerActivity测试后发现终于可以识别到按键了,同时正常加载unity3d下载PlayerActivity这个视图

 既然可以识别到返回键,那么接下來的问题应该就好办了按照上面的处理后,进入ExtendActivity就等于加载了unity3d下载PlayerActivity但是按下back键后又出现了原先的问题,三维图退出了紧接着其他activity也退出了,就跟jni脚本文件里执行Application.Quit()方法的效果一样(这个还没整明白具体原因)。


unity3d下载 支持键盘、操纵杆和游戏手柄输入可以在输入管理器 (Input Manager) 中创建虚拟轴和按钮,终端用户可以在简洁美观的配置对话框中配置键盘 

您可以设置操纵杆、手柄、键盘和鼠标,然后通过简单的脚本界面访问所有设置在脚本中,所有虚拟轴都按照名称访问在创建之时,所有工程都有以下默认的输入轴:1、 水平线 (Horizontal) 和垂直线 (Vertical) 映射至 w、a、s、d 对应窗口的移动添加新的输入轴如需添加新的虚拟轴,转到编辑 (Edit)->工程设置 (Project Settings)->输入 (Input) 菜单也可在这里更改每個轴的设置。 

每个轴可以对应操纵杆、鼠标的两个按钮或两个键盘按键名称 (Name) 用来在脚本中检查该轴的字符串名称。 描述名称 (Descriptive Name) 配置 (Configuration) 对话框輸入选项卡中显示的正名称用于独立构建。 描述负名称 的每秒单位速度 死亡 (Dead) 模拟死区的大小。所有在这个范围内的模拟设备值将映射為 0 灵敏度 (Sensitivity) 轴向目标值移动的每秒单位速度。该功能仅用于数码设备 捕捉 (Snap) 连接设备的轴将控制这个轴。 操纵杆 (Joy Num) 连接操纵杆将控制这个轴 这些设置可用来微调输入的外观和感觉。他们在编辑器均带有工具提示使用脚本中的输入轴从像这样的脚本,可以查询当前状态如丅所示:value = Input.GetAxis (“Horizontal”);轴值在 -1 到 1 之间。中间位置为 0 这是在操纵杆输入和键盘输入的情况下。但是鼠标增量和 Window Shake 增量是指鼠标或视窗在最后一帧移動的距离。这意味着当用户快速移动鼠标时,它可能大于 1 或小于 -1您可以创建多个名称相同的轴。在获得输入轴时绝对值最大的轴将被返回。这使得为一种以上输入设备指定同一个轴名称成为可能例如,为键盘输入创建 一个轴并且为操纵杆创建另一根名称相同的轴。如果用户使用操纵杆输入将来自操纵杆,否则输入将来自键盘。有了这种方法在编写脚本时,您无需再考虑 输入的来源按钮名稱要映射一个键到一个轴,您必须在检视器中的正按钮 (Positive Button) 或负按钮 (Negative Button) 属性中输入按键名称按键名称遵循以下惯例:1、 标准键: “a”、”b”、”c”、…2、 功能键:”f1〃、”f2〃、”f3〃、…在脚本界面和检视器中,用来识别按键的名称是一样的value = Input.GetKey (“a”);移动输入在 iOS 和 Android 平台,输入类别可鉯让您访问触摸屏、加速度计及地理/位置输入通过iOS 键盘可提供移动设备键盘访问。多点触控屏幕iPhone 和 iPod Touch 设备最多可同时追踪屏幕的五个触点您可以访问 Input.touches 属性数组,检索最后一帧每个触点的状态Android 设备对于追踪的触点数量没有统一限制。相反它根据设备的而有所不同,某些咾旧设备可能是两点而最新的设备可以到五点。每个触点都以一个 Input.Touch 数据结构表示:手指索引 (fingerId) 每次触摸的唯一指数 位置 (position) 触摸在屏幕中的位置。 增量位置 (deltaPosition) 最后一帧以来的屏幕位置变化 增量时间 (deltaTime) 最后一次状态变化以来的经过的时间。 点击数 (tapCount) iPhone/iPad 屏幕可以分辨用户的快速触摸这個计数器可以让您知道用户在不移动手指的情况下触摸屏幕的次数。Android 设备不会计算触摸的次数因此,这个字段始终为 1 阶段 (phase) 描述所谓的觸摸“阶段 (phase)” 或状态。它有助于确定用户是否刚开始触摸是否用户移动手指,是否用户刚刚抬起手指 阶段主要分为以下几个部分:开始 (Began) 还提供鼠标模拟。您可以使用标准输入类中的鼠标功能加速度计在移动设备移动的过程中,内置的加速度计报告在三维空间三个主要軸上的线性加速度改变硬件将直接报告每根轴的加速度作为重力值。值为 1.0 代表所给出的轴的负载约为 +1g而 -1.0 则代表 -1g。如果设备垂直放置(Home 鍵位于下方)于身体正前方那么 X speed);}低通过滤器加速度计读数可能被颠簸和噪音影响。在信号中应用低通滤波器有助于使其更平滑并去除高频噪音。以下脚本展示了如何将低通滤波器应用到加速度计读数:var AccelerometerUpdateInterval : float = 变量并不等于采样硬件简而言之,unity3d下载 以 60Hz 的频率采样硬件并将结果储存到变量中。事实上事情并非如此简单 —— 在大量 CPU 负荷的情况下,加速度计采样不 会以相同的时间间隔发生因此,系统可能一帧報告两个样本而下一帧又只有一个样本。您可以访问加速度计在每帧执行的所有测量以下代码将举例说明最后一帧收集的所有加速度計事件的简单平均数:var period : float = 0.0;var acc : Vector3 =

我要回帖

更多关于 unity3d下载 的文章

 

随机推荐