移动设备游戏中经常会遇到重力感应的开发,Unity简化了重力感应的开发, 通过访问Input.acceleration属性,取回加速度传感器的值。首先我们看一下重力传感器的方向问题。Unity3D中重量的取值范围是 -1.0 到 +1.0.
X轴:home按键在下手机面朝天向右旋转90度重力分量为+1.0 向左旋转90度重力分量为-1.0
Y轴:home按键在上手机背朝自己重力分量为+1.0 home按键在下手机面朝自己重力分量为-1.0
Z轴:手机面朝地面重力分量为+1.0 手机面朝天空重力分量为-1.0
方向如下图所示。
unity中使用Input.acceleration的x,y,z属性即可获得重力分量:
Input.acceleration.x; 重力感应X轴的重力分量
Input.acceleration.y; 重力感应Y轴的重力分量
Input.acceleration.z; 重力感应Z轴的重力分量
下面我们使用脚本来掩饰重力感应效果,分别控制贴图移动和方块移动。
public class mono4 : MonoBehaviour {
public Texture texture;//贴图,在Inspector中指定
private float x,y;//贴图的坐标
public float speed = 10.0F;//方块移动速度
void Update() {
//以下控制方块移动
Vector3 dir = Vector3.zero;//方块移动向量
dir.x = -Input.acceleration.y;
dir.z = Input.acceleration.x;
if (dir.sqrMagnitude > 1)
dir.Normalize();
dir *= Time.deltaTime;
transform.Translate(dir * speed);
//以下控制贴图移动
x += Input.acceleration.x * 30;
y += -Input.acceleration.y * 30;
//避免小球超出屏幕
if(x < 0){
x = 0;
}else if(x > Screen.width-50){
x = Screen.width-50;
}
if(y < 0){
y = 0;
}else if(y > Screen.height-50){
y = Screen.height-50;
}
}
void OnGUI(){
//将重力分量打印出来
GUI.Label(new Rect(100,100,100,100),"x="+Input.acceleration.x+" y="+Input.acceleration.y+" z="+Input.acceleration.z);
//绘制贴图
GUI.DrawTexture(new Rect(x,y,50,50),texture);
}
}
在Android真机上测试如下: