- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Unity 制作一款使用陀螺仪的游戏。我正在尝试检测设备围绕穿过屏幕的轴的旋转,我假设它是 Unity Space 中的 Z 轴。我尝试使用 Input.gyro.attitude.eulerAngles.z
但是当围绕其他轴倾斜设备时它不会保持不变,我希望它保持不变以便只有“Z 轴”例如,确定汽车方向盘的旋转。我该如何实现?
编辑:我尝试做其他事情。我使用了 Input.gyro.rotationRateUnbiased
而不是 Input.gyro.attitude.eulerAngles
代码如下:
Vector3 gInput = Input.gyro.rotationRateUnbiased;
gyroEuler += gInput * Time.deltaTime * Mathf.Rad2Deg;
float rollAngle = gyroEuler.z;
while (rollAngle < 0)
{
rollAngle += 360;
}
while (rollAngle > 360)
{
rollAngle -= 360;
}
但是 gyroEuler
将设置为 (0, 0, 0)
而不管游戏开始时的设备方向如何,因此在游戏开始时设备方向是未知的开头和 Input.gyro.rotationRateUnbiased
都非常不准确。我想像许多游戏一样旋转屏幕,例如 Temple Run 2,但我希望能够将其旋转 360 度并获得该旋转角度。
最佳答案
好吧,我刚刚试过了,效果很好:
private void Start()
{
Input.gyro.enabled = true;
}
private void Update()
{
Vector3 previousEulerAngles = transform.eulerAngles;
Vector3 gyroInput = -Input.gyro.rotationRateUnbiased;
Vector3 targetEulerAngles = previousEulerAngles + gyroInput * Time.deltaTime * Mathf.Rad2Deg;
targetEulerAngles.x = 0.0f; // Only this line has been added
targetEulerAngles.z = 0.0f;
transform.eulerAngles = targetEulerAngles;
//You should also be able do it in one line if you want:
//transform.eulerAngles = new Vector3(0.0f, transform.eulerAngles.y - Input.gyro.rotationRateUnbiased.y * Time.deltaTime * Mathf.Rad2Deg, 0.0f);
}
您需要做的是创建一个中央Transform(或使用您的播放器)并将您的Camera 作为它的子级。然后设置相机 z 距离、高度和角度以调整您的 View 。最后将上述脚本附加到中央的 Transform:旋转它将使您的Camera 沿着弧线移动。
编辑:如果您想使用Input.gyro.attitude
,您可以按如下方式进行
private Vector3 startEulerAngles;
private Vector3 startGyroAttitudeToEuler;
private void Start()
{
Input.gyro.enabled = true;
startEulerAngles = transform.eulerAngles;
startGyroAttitudeToEuler = Input.gyro.attitude.eulerAngles;
}
private void Update()
{
Vector3 deltaEulerAngles = Input.gyro.attitude.eulerAngles - startGyroAttitudeToEuler;
deltaEulerAngles.x = 0.0f;
deltaEulerAngles.z = 0.0f;
transform.eulerAngles = startEulerAngles - deltaEulerAngles;
}
public void ResetGyro()
{
startGyroAttitudeToEuler = Input.gyro.attitude.eulerAngles;
}
编辑 2:
我想您正在寻找的是 this 之类的东西: 然后你可以检查 upVec.y
和 upVec.x
为你的下/上和左/右轴。
首先创建一个空的 GameObject,它将用作包含陀螺仪旋转的虚拟对象,并将其设置在脚本的 phoneDummy
字段中。
public Transform phoneDummy;
private void Start()
{
Input.gyro.enabled = true;
}
private void Update()
{
Vector3 gyroEuler = Input.gyro.attitude.eulerAngles;
phoneDummy.transform.eulerAngles = new Vector3(-1.0f * gyroEuler.x, -1.0f * gyroEuler.y, gyroEuler.z);
Vector3 upVec = phoneDummy.transform.InverseTransformDirection(-1f * Vector3.forward);
}
upVec.y
将是您的pitch,upVec.x
将是您的滚动轴。(检查 here 以获取轴引用)
但请记住,来自 Input.gyro
的值远非完美:如果您正在寻找更持久的值,您可能需要使用 Input.compass.magneticHeading
(但当然不太精确)。
希望这对您有所帮助,
关于android - Unity - 陀螺仪 - 仅绕一个轴旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927052/
我需要一种方法来从局部获取全局引用系中旋转的欧拉角。我正在使用 c#、wpf 3d 和陀螺仪。我在屏幕上有一个地球仪,它应该以与陀螺仪相同的方式移动。由于陀螺仪发送相对于自身的运动,我需要使用四元数来
我试图理解不同的运动/位置陀螺仪、运动和加速度所代表的含义。 (startGyroUpdates、startDeviceMotionUpdates 等)。 但是,经过一些研究后,我很难看出陀螺仪和运动
我想使用陀螺仪、加速度计和磁力计来获得 3 轴完全平滑的旋转。 第一个问题是我的输出有很大的噪音,我想知道如何消除它。 第二个问题是陀螺仪漂移,我认为应该用卡尔曼滤波器来解决。 第三个问题是加速度计。
我正在开发一个游戏,需要检测设备是否向上或向下移动以向上或向下移动角色,因为我正在使用陀螺仪(如果有更好的方法请纠正我) 但是陀螺仪对我来说非常复杂(因为我不太了解 phisyc),所以我不知道如何根
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
我一直在尝试确定如何将 iPhone 陀螺仪用于驾驶员安全应用程序,但我对此感到非常困惑。我知道手机中的陀螺仪可以测量手机本身的变化和旋转,但是它可以用来测量手机在行驶的汽车中发生的变化吗? 例如,如
我正在尝试创建一个应用程序来跟踪设备在 2D 空间中的移动。在网上查了下,我能找到的一种方法是积分两次线性加速,但是错误很可怕。 这个问题有什么解决办法吗?我希望能够向上移动手机,这会导致在屏幕上绘制
我正在使用 Unity 制作一款使用陀螺仪的游戏。我正在尝试检测设备围绕穿过屏幕的轴的旋转,我假设它是 Unity Space 中的 Z 轴。我尝试使用 Input.gyro.attitude.eul
我正在学习使用 iOS 中的陀螺仪传感器编写应用。是否有处理陀螺仪的类,类似于加速度计的 UIAcceleration/UIAccelerometer/UIAccelerometerDelegate?
我想通过陀螺仪传感器的能力得到我想“看”的X、Y、Z位置的精确位置 我能够从陀螺仪传感器获得 9 的值,但我无法计算出从该陀螺仪传感器获得准确位置的公式。 我想要公式或例子来得到正确的答案 这是我想要
最近我做了一些研究,使用加速度计 + 陀螺仪来使用这些传感器在没有 GPS 帮助的情况下跟踪智能手机(见这篇文章) Indoor Positioning System based on Gyrosco
我正在测试 Core Motion 并使用陀螺仪。现在我得到了我不理解的值(value)观。我的假设是对于每个 x、y 和 z,我会得到一个 0-360 之间的值,这将是一个完整的旋转,但事实并非如此
我正在尝试使用陀螺仪制作一个简单的应用程序,其中角色会根据 iPad 1 的旋转进行移动。 我的代码无法正常工作,因此我测试了原始、俯仰、偏航的值,无论我如何移动设备,它们实际上都保持为零。我确定 i
我有一个非常简单的应用程序,我试图通过核心运动使用陀螺仪。 此时,出于测试目的,我只是获取滚动、俯仰和偏航的值并在屏幕上打印。根据下图,据我所知,roll、pitch、yaw分别对应红、绿、蓝轴,对吗
我正在使用 Core Motion,并且收到“展开可选值时意外发现 nil”,但只有大约一半的时间加载应用程序。如何更正下面的代码,使其稳定? import UIKit import CoreMoti
我有一些代码旨在测量移动设备上的设备运动,它曾经可以在移动浏览器中运行,但现在不再可以了。以下是直接取自 Mozilla 网络文档的示例: function handleMotionEvent(eve
Original Question 我正尝试在我的 iPhone 6s 上使用 A-Frame 运行一个 webVR 程序,而我测试过的这三个浏览器无法访问我的陀螺仪。 Safari Chrome F
我想知道 Apple 开发人员是否可以澄清 API 是否可用。 互联网上有一些猜测,似乎没有人回答这个问题。 或多或少,Apple Watch OS 2.0 并不是最容易使用的测试版,甚至发行版似乎也
我想制作一个应用程序来获取 Android 手机的所有读数,例如加速度计、GPS、陀螺仪、摄像头等。记录所有这些数据并将其发送到云端以供使用。 我是一名初学者 android 开发人员,想基本了解如何
我是一名优秀的程序员,十分优秀!