title: Start position gyroscope camera unity
body: <p>I have a 360 video inside a sphere in my unity scene, and I'm using a gyro script so the user can rotate around and watch the movie, the problem is there is a person in the movie and I want the camera to start at the person's position, not the mobile's position, but the way I'm trying to do it is not working:</p>
  
  <pre><code>public class Gyro : MonoBehaviour
  {
  
  
      void Start()
      {
          if (SystemInfo.supportsGyroscope)
          {
              Input.gyro.enabled = true;
          }
  
  
              GameObject cameraParent = new GameObject("camParent");
              cameraParent.transform.position = this.transform.position;
              this.transform.parent = cameraParent.transform;
              cameraParent.transform.Rotate(Vector3.right, 90);
  
      }
  
  
      void Update()
      {
  
  
              Quaternion cameraRotation = new Quaternion(Input.gyro.attitude.x, Input.gyro.attitude.y, -Input.gyro.attitude.z, -Input.gyro.attitude.w);
              this.transform.localRotation = cameraRotation;
  
  
      }
  }
  </code></pre>
  
  <p><strong>SOLUTION</strong></p>
  
  <pre><code>void Start()
  {
          Application.targetFrameRate = 60;
          initialYAngle = transform.eulerAngles.y;
          Input.gyro.enabled = true;
      }
  
      void Update()
      {
          if(calibra){
              CalibrateYAngle();
              calibra = false;
          }
          ApplyGyroRotation();
          ApplyCalibration();
      }
  
  
  
      public void CalibrateYAngle()
      {
          calibrationYAngle = appliedGyroYAngle - initialYAngle; // Offsets the y angle in case it wasn't 0 at edit time.
      }
  
      void ApplyGyroRotation()
      {
          transform.rotation = Input.gyro.attitude;
          transform.Rotate(0f, 0f, 180f, Space.Self); // Swap "handedness" of quaternion from gyro.
          transform.Rotate(90f, 180f, 0f, Space.World); // Rotate to make sense as a camera pointing out the back of your device.
          appliedGyroYAngle = transform.eulerAngles.y; // Save the angle around y axis for use in calibration.
      }
  
      void ApplyCalibration()
      {
          transform.Rotate(0f, -calibrationYAngle, 0f, Space.World); // Rotates y angle back however much it deviated when calibrationYAngle was saved.
      }
  </code></pre>