BadCats
@BadCats

Не поварачивается камера с помощью гироскопа?

public class vr : MonoBehaviour {
   public float X
    {
        set { x = value; }
        get {return x; }
    }

    public float Y
    {
        set { y = value; }
        get { return y; }
    }
    public float Z
    {
        set { z = value; }
        get { return z; }
    }
    float x, y, z;
    Transform CameraTransform;
    // Use this for initialization
    void Start () {
       CameraTransform=  GetComponent<Transform>();
	}
	
	// Update is called once per frame
	void Update ()
    {
        X = Input.gyro.rotationRate.x;
        Y = Input.gyro.rotationRate.y;
        Z =Input.gyro.rotationRate.z;
        RotGyro(X,Y ,Z );
        //Cos angle=(a1*b1+a2*b2+a3*b3)/sqrt(a1^2+a2^2+a3^2)*sqrt(b1^2+b2^2+b3^2)
        
    }
    float cos_angle;
    float sum1;
    float sum2;
   public void RotGyro(float x,float y,float z)

    {
        if (Input.gyro.enabled)
        {
            bool EnabledGyro = true;
            Debug.Log("GyroEnabled");
            if (y  >0)
         
            RotLeft(X, Y, Z, cos_angle);
        }

        else
        {
            RotRight(X, Y, Z, cos_angle);
        }

        sum1 = Mathf.Pow(X, 2) + Mathf.Pow(Y, 2) + Mathf.Pow(Z, 2);
        sum2 = Mathf.Pow(Input.gyro.attitude.x, 2) + Mathf.Pow(Input.gyro.attitude.y, 2) + Mathf.Pow(Input.gyro.attitude.z, 2);
        cos_angle = (Input.gyro.attitude.x * X + Input.gyro.attitude.y * Y + Input.gyro.attitude.z * Z) / (Mathf.Sqrt(sum2) * Mathf.Sqrt(sum1));
    }

    void RotLeft(float x, float y, float z, float angle)
    {
        transform.RotateAround(transform.position, transform.position.x - cos_angle * Time.deltaTime);
    }



    void RotRight(float x, float y, float z, float angle)
    {
        transform.RotateAround(transform.position, transform.position.x +cos_angle * Time.deltaTime);
    }

}
  • Вопрос задан
  • 338 просмотров
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Что-то вы перемудрили, Gyroscope.attitude это кватернион, а не вектор, нельзя его компоненты брать и просто так использовать. Вы пример из документации пробовали, работает?
using UnityEngine;

public class GyroscopeExample : MonoBehaviour
{
    private void Awake()
    {
        Input.gyro.enabled = true;
    }

    private void Update()
    {
        transform.rotation = Input.gyro.attitude;
    }
}

А вообще говоря, если вы пытаетесь сделать мобильную виртуальную реальность, то для этого в настройках плеера есть специальная галочка, включаете её и вращение камеры само по себе обновляется, даже делать ничего не надо.
rRAEI
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы