|
在移动设备上,这输入类提供了访问触摸屏,加速度计和地理位置输入。
访问移动设备上的键盘是通过iOS键盘。
多点触摸屏
iPhone和iPod Touch设备能够追踪多达五个手指触摸屏幕的同时。你可以找回状态,每个手指触摸屏幕在最后一帧的访问input.touches属性数组。
Android设备多少个手指没有统一的限制他们的轨道。相反,它从不同的设备可以是任何东西,从旧设备两摸至五手指在一些较新的设备。
每个手指触摸用触摸输入。数据结构:
财产 功能:
fingerid 一个触摸的唯一索引。
位置 触摸的屏幕位置。
deltaposition 屏幕位置改变自最后一帧。
Δtime 时间已经过去的状态改变了。
tapcount iPhone / iPad的屏幕能够通过用户识别快速手指轻敲。此计数器将让你知道多少次用户利用屏幕不动一根手指的两侧。Android设备不计数的水龙头,这个领域始终是1。
阶段 描述了所谓的“相”或触摸的状态。它可以帮助你确定如果刚开始触摸,如果用户移动手指,或如果他们只是抬起手指。
相位可以是下列之一:
开始 手指刚摸到屏幕。
感动 手指在屏幕上移动。
静止 一个手指触摸屏幕,但自最后一帧没有移动。
结束了 手指从屏幕上移开。这是一个触摸的最后阶段。
取消 系统取消跟踪触摸,如(例如)用户将设备放在他们的脸上或五个以上的接触同时发生。这是一个触摸的最后阶段。
下面的例子将一条射线只要用户在屏幕上点击:
var particle : GameObject;
function Update () {
for (var touch : Touch in Input.touches) {
if (touch.phase == TouchPhase.Began) {
// Construct a ray from the current touch coordinates
var ray = Camera.main.ScreenPointToRay (touch.position);
if (Physics.Raycast (ray)) {
// Create a particle if hit
Instantiate (particle, transform.position, transform.rotation);
}
}
}
}
鼠标模拟
除了原有的触摸支持Unity iOS / Android提供了一个模拟鼠标。你可以使用标准的鼠标功能输入类值得注意的是,iOS和Android设备被设计为支持多指触摸。使用鼠标功能将支持只是一个手指触摸。同时,在移动设备上的手指触摸可以移动从一个地方到另一个之间没有运动。移动设备上的鼠标模拟将提供运动,所以是非常不同的触摸输入。该建议是在早期发育中使用模拟鼠标而使用触摸输入尽快。
加速度计
随着移动设备的移动,一个内置的加速度计的线性加速度变化的报道 沿着三个主轴的三维空间。 沿每个轴的加速度是由硬件作为G-force值直接报告。1个价值 表示负荷约1g沿着指定的轴而值–1 代表–1G。如果你保持设备直立(home按钮在底部的 )在你面前,X轴是正沿着右,Y轴是 正直接了,和Z轴正向指向你。
你能得到的加速度值的访问input.acceleration财产
下面是一个示例脚本将使用加速度传感器移动一个物体:
var speed = 10.0;
function Update () {
var dir : Vector3 = Vector3.zero;
// we assume that the device is held parallel to the ground
// and the Home button is in the right hand
// remap the device acceleration axis to game coordinates:
// 1) XY plane of the device is mapped onto XZ plane
// 2) rotated 90 degrees around Y axis
dir.x = -Input.acceleration.y;
dir.z = Input.acceleration.x;
// clamp acceleration vector to the unit sphere
if (dir.sqrMagnitude > 1)
dir.Normalize();
// Make it move 10 meters per second instead of 10 meters per frame...
dir *= Time.deltaTime;
// Move object
transform.Translate (dir * speed);
}
低通滤波器
加速度计读数可以大大咧咧的样子。采用低通滤波的信号让你光滑,去除高频噪声。
以下脚本显示了你如何运用低通滤波加速度计读数:
var AccelerometerUpdateInterval : float = 1.0 / 60.0;
var LowPassKernelWidthInSeconds : float = 1.0;
private var LowPassFilterFactor : float = AccelerometerUpdateInterval / LowPassKernelWidthInSeconds; // tweakable
private var lowPassValue : Vector3 = Vector3.zero;
function Start () {
lowPassValue = Input.acceleration;
}
function LowPassFilterAccelerometer() : Vector3 {
lowPassValue = Vector3.Lerp(lowPassValue, Input.acceleration, LowPassFilterFactor);
return lowPassValue;
}
的价值更大lowpasskernelwidthinseconds,较慢的滤波值将收敛到当前的输入样本(反之亦然)。
我喜欢阅读时尽可能的加速度计精度。该 怎么 办 ?
阅读input.acceleration变量不等于采样硬件。简单地说,统一硬件样品频率60Hz,将结果存储到变量。在现实中,事情更复杂一点–加速度传感器采样不会发生在一致的时间间隔,如果大量的CPU负荷的情况下。因此,系统可能会报告2份,在一帧,然后1个采样在下一帧。
您可以访问通过加速度传感器在所有帧的测量。下面的代码将说明一个简单的加速度计的事件,收集在最后一帧平均:
var period : float = 0.0;
var acc : Vector3 = Vector3.zero;
for (var evnt : iPhoneAccelerationEvent in iPhoneInput.accelerationEvents) {
acc += evnt.acceleration * evnt.deltaTime;
period += evnt.deltaTime;
}
if (period > 0)
acc *= 1.0/period;
return acc;
|
|