根据陀螺仪传感器的z轴方向旋转对象

时间:2019-02-13 13:51:45

标签: c# unity3d gyroscope

我想在一个统一游戏中轮换我的玩家。 我正在尝试通过使用一些方法(如rotateto或slurp)使其工作,这些方法应该朝给定角度旋转。但是,我实际上不确定它们的用途以及是否正确使用它们。

我希望摄像机根据设备从玩家最初开始游戏的边界之外倾斜的角度进行旋转。然后对于边界的外部,我希望设备倾斜得越远,字符在该方向上的旋转就越快。

但是,我只能将角色旋转到与设备位置完全相同的角度。 这是我进行旋转的尝试,我知道它可能不是最有效的,但是我碰到了墙,无法到达任何地方。

private void Start() {
    PlayerRotation = Player.transform.rotation;
    if (SystemInfo.supportsGyroscope) {
        GyroStart();
        startrotation = Quaternion.Euler(Gyro.attitude.eulerAngles);
        Debug.Log("Gyro Enabled");
        Debug.Log("Start Rotation: " + startrotation);
    }
    else {
        Debug.Log("No Gyro Detected");
    }
}
private void Update()
{
    mappedRotation = Quaternion.Euler(0.0f,0.0f,ExtentionMethods.Remap((Input.gyro.attitude.eulerAngles.z - startrotation.z), 0,360,0,180));
    TargetRotation = mappedRotation * TargetRotation;
    Debug.Log("Target Rotation:" + TargetRotation);
    if (mappedRotation.eulerAngles.z > 15f)
    {
        PlayerRotation = Quaternion.Slerp(PlayerRotation, TargetRotation, Time.deltaTime);
        Debug.Log("Positive");
    }
    else if (mappedRotation.eulerAngles.z>155f)
    {
        TargetRotation = Quaternion.Inverse(TargetRotation);
        PlayerRotation = Quaternion.Slerp(PlayerRotation, TargetRotation, Time.deltaTime);
        Debug.Log("Negative");
    }
    else Debug.Log("Dead Zone");
}

因此,我想知道如何解决的问题是为什么我的角色无法旋转以及我是否正确使用了欧拉? 谢谢

0 个答案:

没有答案