通过Unity3D Remote使用Android加速计- Z轴要在180度平面上测量,而不是360度
本文关键字:测量 平面 180度 360度 Android 使用 Remote Unity3D 加速 通过 | 更新日期: 2023-09-27 18:13:06
首先,我对Unity和Android都一窍不通,但我已经做到了……75%想要达到100%
我使用Unity3D通过Unity Remote从我的Android RazrM接收加速度计数据。我正在使用这些数据在游戏中移动。
手机上的Z轴是从上到下的纵向视图,Unity3D中的Z轴是屏幕的深度。
我使用手机面朝上,当它平躺在桌子上时,第一人称控制器不动。当我将手机从水平方向(0)向前倾斜时,我(作为第一人称控制器)将向前移动。这很棒,但当我将手机从水平方向向后倾斜时,我也会向前移动。
我相信这是因为Z轴是360度的。上下颠倒,手机会给我我想要的加速值和向后移动。不幸的是,我不可能一直翻动手机。它必须面朝上。
我怎么做才能知道z轴在哪个象限?有条件让我阅读吗?这款手机没有陀螺仪。下面是我的c#脚本。X轴让玩家左右移动,Z轴只能向前,不能向后。
public class Movement2 : MonoBehaviour {
public float moveX = Input.acceleration.x;
public float moveY = Input.acceleration.y;
public float moveZ = Input.acceleration.z;
public int zeroZFlag;
void Update () {
moveX = Input.acceleration.x * 1;
moveY = 0;
moveZ = (1+ (Input.acceleration.z)); //~0.036 when flat, moveZ stays positive
transform.Translate (0, 0, 0); // no movement when flat
if (moveZ >= 0.055 && moveZ >= -0.1){
transform.Translate(moveX, moveY, moveZ);
zeroZFlag = 1;
}
编辑:我想出了如何解决这个问题,我张贴它,希望别人会得到帮助。我用了Y轴的组合,它在一个方向上是负的,在另一个方向上是正的,而Z轴,它一直是正的。下面是代码:
public class Movement2 : MonoBehaviour {
public float moveX = Input.acceleration.x;
public float moveY = Input.acceleration.y;
public float moveZ = Input.acceleration.z;
public short zeroZFlag;
void Update () {
moveX = Input.acceleration.x * 1;
moveY = Input.acceleration.y * 1;;
//moveZ = (1-(Mathf.Abs(Input.acceleration.z * 1)));
moveZ = (1+ (Input.acceleration.z)); //~0.036 when flat, moveZ stays positive
transform.Translate (0, 0, 0);
if (moveZ >= 0.055 && moveZ >= -0.1) { zeroZFlag = 1;
if (moveY >= 0) {
transform.Translate (moveX, 0, moveZ);
}
if (moveY < 0){
transform.Translate (moveX, 0, -moveZ);
}
else {
zeroZFlag = 0;
}
}
一个更简单的实现是这样的:
rigidbody.AddForce (new Vector3(Input.acceleration.x, 0, -Input.acceleration.z));
添加RigidBody组件并通过添加力来修改速度是首选方法。