通过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;  
     }
    }

通过Unity3D Remote使用Android加速计- Z轴要在180度平面上测量,而不是360度

一个更简单的实现是这样的:

rigidbody.AddForce (new Vector3(Input.acceleration.x, 0, -Input.acceleration.z));

添加RigidBody组件并通过添加力来修改速度是首选方法。