- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要有一个游戏对象指向北方,并且我想将它与 gyro.attitude 输入结合起来。我曾尝试一步完成此操作,但未成功。也就是说,我无法制作任何我在网上找到的陀螺仪脚本,并满足始终指向北方的额外要求。相信我,我已经尝试了我能找到的关于这个主题的所有脚本。我推断这是不可能的,认为可以做到的可能是愚蠢的;至少不是这样(即多合一)。我猜你可以说我猜测你不能同时做两件事。然后我想也许我可以通过分解职责来获得同样的效果。也就是说,一个始终通过 Y 轴指向北方的游戏对象。太好了,像这样完成了:
_parentDummyRotationObject.transform.rotation = Quaternion.Slerp(_parentDummyRotationObject.transform.rotation, Quaternion.Euler(0, 360 - Input.compass.trueHeading, 0), Time.deltaTime * 5f);
当游戏对象在 Y 轴上指向北方时,我想添加第二个游戏对象,在这种情况下是一个相机,在 X 和 Z 轴上使用陀螺仪输入进行旋转。我必须消除相机上的 Y 轴的原因是因为我得到了双重旋转。有两个东西同时旋转(即相机和游戏对象),180 度旋转在场景中产生 360。请记住,我需要游戏对象始终根据设备指南针指向北 (IRL)。如果我的设备指向东方,那么我的游戏对象将在统一场景中旋转 90 度,因为它指向(旋转)北方。
我已经阅读了很多关于陀螺仪相机 Controller 的文章,我看到很多提到的一件事是您不应该尝试仅在 1 或 2 轴上执行此操作(限制它),当使用四元数时,当您不知道自己是什么时是不可能的正在做,我显然不这样做。
我已经从这个已解决的问题中尝试了所有 3 个解决方案:Unity - Gyroscope - Rotation Around One Axis Only并且每个都无法在 1 个轴上旋转我的相机以满足我的旋转需求。想我会先尝试让 1 个轴工作,然后再用第 2 个轴弄混水。顺便说一句,我的要求很简单,相机应该只在基于我设备的 X 轴的 1 个轴(以任何方向)上旋转。如果我可以解决 X,那么我认为获得 Z 陀螺仪输入来控制相机也很棒。到目前为止,我无法仅在 1 个轴 (X) 上控制相机。无论如何,这是我的发现......
第一个使用 Input.gyro.rotationRateUnbiased 的解决方案完全不准确。也就是说,如果我旋转我的设备几次,然后将我的手机/设备放在我的 table 上,相机每次都会处于不同的旋转/位置。没有一致性。这是我第一次尝试/解决方案的代码:
<code>
private void Update()
{
Vector3 previousEulerAngles = transform.eulerAngles;
Vector3 gyroInput = Input.gyro.rotationRateUnbiased;
Vector3 targetEulerAngles = previousEulerAngles + gyroInput * Time.deltaTime * Mathf.Rad2Deg;
targetEulerAngles.y = 0.0f;
targetEulerAngles.z = 0.0f;
transform.eulerAngles = targetEulerAngles;
}
</code>
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.y = 0.0f;
deltaEulerAngles.z = 0.0f;
transform.eulerAngles = startEulerAngles - deltaEulerAngles;
}
private void Start()
{
_upVec = Vector3.zero;
Input.gyro.enabled = true;
startEulerAngles = transform.eulerAngles;
}
private void Update()
{
Vector3 gyroEuler = Input.gyro.attitude.eulerAngles;
phoneDummy.transform.eulerAngles = new Vector3(-1.0f * gyroEuler.x, -1.0f * gyroEuler.y, gyroEuler.z);
_upVec = phoneDummy.transform.InverseTransformDirection(-1f * Vector3.forward);
_upVec.z = 0;
// _upVec.x = 0;
_upVec.y = 0;
transform.LookAt(_upVec);
// transform.eulerAngles = _upVec;
}
最佳答案
我会通过以下方式做到这一点:
相机默认 0, 0, 0 旋转
Screenshot
放置在相机默认位置中心的对象。
相机脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
Camera m_MainCamera;
// Start is called before the first frame update
void Start()
{
// Disable the sleep timeout during gameplay.
// You can re-enable the timeout when menu screens are displayed as necessary.
Screen.sleepTimeout = SleepTimeout.NeverSleep;
// Enable the gyroscope.
if (SystemInfo.supportsGyroscope)
{
Input.gyro.enabled = true;
}
m_MainCamera = Camera.main;
m_MainCamera.enabled = true;
}
// Update is called once per frame
void Update()
{
if (m_MainCamera.enabled)
{
// First - Grab the Gyro's orientation.
Quaternion tAttitude = Input.gyro.attitude;
// The Device uses a 'left-hand' orientation, we need to transform it to 'right-hand'
Quaternion tGyro = new Quaternion(tAttitude.x, tAttitude.y, -tAttitude.z, -tAttitude.w);
// the gyro attitude is tilted towards the floor and upside-down reletive to what we want in unity.
// First Rotate the orientation up 90deg on the X Axis, then 180Deg on the Z to flip it right-side up.
Quaternion tRotation = Quaternion.Euler(-90f, 0, 0) * tGyro;
tRotation = Quaternion.Euler(0, 0, 180f) * tRotation;
// You can now apply this rotation to any unity camera!
m_MainCamera.transform.localRotation = tRotation;
}
}
}
有了这个脚本,我的对象无论如何总是面向南。
Quaternion tRotation = Quaternion.Euler(-90f, 0, 0) * tGyro;
tRotation = Quaternion.Euler(0, 0, 180f) * tRotation;
//Face NORTH:
tRotation = Quaternion.Euler(0,180f, 0) * tRotation;
希望这可能会有所帮助;)
关于c# - 需要带罗盘帮助的陀螺仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46943868/
我是 objective-c 的新手,所以如果我的问题太垃圾,我想道歉。 我正在编写一个指南针,但它正在运行(感谢教程)。给出了实际位置(经度和纬度)。我的指南针内的箭头是否可以向我显示特定位置(经度
我正在为移动设备开发“指南针”。我有以下几点: point 1 (current location): Latitude = 47.2246, Longitude = 8.8257 point 2 (
有没有办法在 SQL Server 2008R2 中知道一个点是否在另一点的南、东等? 例如,我有一个来源 point(lat1,lng1)我想知道在哪里point(lat2,lng2)位于该原点:北
我正在尝试在 Windows Phone 项目上使用 GART ( http://gart.codeplex.com/ ),它需要使用陀螺仪。 大多数时候我觉得陀螺仪没有校准并且显示错误的结果。 有没
在我的印象中,iOS 中 Google map 的指南针效果非常好。我说的是 map 中蓝色小“我的位置”点的罗盘箭头,请参阅 Google Maps SDK - My Location .在最近的1
我是一名优秀的程序员,十分优秀!