Синтаксис:
Используется csharp
public class TestInputController : MonoBehavior
{
public Transformbg;
private Quaternion referenceRotation;
void Start()
{
input.gyro.enabled = true;
referenceRotation = GetDeviceRotation();
}
private Quaternion GetDeviceRotation()
{
return new Quaternion(0.5f, 0.5f, -0.5f, 0.5f) * Input.gyro.attitude * new Quaternion(0, 0, 1, 0);
}
private float GetRollAngle(Quaternion refRotation, Quaternion currentRotation)
{
Quaternion eliminationOfXY = Quaternion.Inverse(Quaternion.FromToRotation(refRotation *
Vector3.forward, currentRotation * Vector3.forward));
Quaternion rotationZ = eliminationOfXY * currentRotation;
return rotationZ.eulerAngles.z;
}
void Update()
{
bg.transform.rotation = Quaternion.Slerp(bg.transform.rotation,
Quaternion.Euler(0f, 0f, GetRollAngle(referenceRotation, GetDeviceRotation())),
8f * Time.deltaTime);
}
}
{
public Transformbg;
private Quaternion referenceRotation;
void Start()
{
input.gyro.enabled = true;
referenceRotation = GetDeviceRotation();
}
private Quaternion GetDeviceRotation()
{
return new Quaternion(0.5f, 0.5f, -0.5f, 0.5f) * Input.gyro.attitude * new Quaternion(0, 0, 1, 0);
}
private float GetRollAngle(Quaternion refRotation, Quaternion currentRotation)
{
Quaternion eliminationOfXY = Quaternion.Inverse(Quaternion.FromToRotation(refRotation *
Vector3.forward, currentRotation * Vector3.forward));
Quaternion rotationZ = eliminationOfXY * currentRotation;
return rotationZ.eulerAngles.z;
}
void Update()
{
bg.transform.rotation = Quaternion.Slerp(bg.transform.rotation,
Quaternion.Euler(0f, 0f, GetRollAngle(referenceRotation, GetDeviceRotation())),
8f * Time.deltaTime);
}
}
Как можно убрать зависимость от поворота смартфона в пространстве и оставить только расчет угла наклона для поворота объекта по оси z?