2015-04-27 5 views
1

У меня есть вопрос о положении депонировки гироскопа. Я создал игру, в которой вы перемещаете космический корабль вперед, назад, влево и вправо, перемещая телефон (используя гироскоп). Моя проблема в том, что я должен держать телефон горизонтально, как на рисунке 1. Если я держу телефон как обычно (около 60 градусов к земле), как на рисунке 2, корабль идет вниз. Кто-нибудь знает, как изменить положение гироскопа по умолчанию, поэтому я обычно могу держать телефон и управлять судном? Я хочу, чтобы корабль был неподвижным, если мой телефон держится на 60 градусов. В противном случае он перемещается в указанное название.Позиция единственного гироскопа по умолчанию

enter image description here

Мой код:

using UnityEngine; 
using System.Collections; 

[System.Serializable] 
public class Boundaryy 
{ 
    public float xMin, xMax, zMin, zMax; 
} 

public class PlayerControll1 : MonoBehaviour { 
    public float speed; 
    public float tilt; 
    public Boundaryy boundary; 

    // Use this for initialization 
    void Start() { 
     Input.gyro.enabled = true; 
     Screen.sleepTimeout = SleepTimeout.NeverSleep; 
     } 

    void FixedUpdate() { 

     float xi = Input.gyro.userAcceleration.x; 
     float yi = Input.gyro.userAcceleration.y; 


     Vector3 movement = new Vector3 (xi, 0.0f, yi); 
     rigidbody.velocity = movement * speed; 

     rigidbody.position = new Vector3 
      (
       Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax), 0.0f, 
       Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax) 
       ); 

     rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt); 

    } 
} 

Если кто-нибудь есть ключ, как это сделать, пожалуйста, помогите! :)

ответ

0

Просто решить подобную проблему, хотя я надеюсь, теперь вы решили эту проблему, я думал, что я разделю свое решение в случае, если другие наткнуться этим вопросом ...

В точке, где вы находитесь начиная с игры вам просто нужно вести запись контрольной точки. Тогда для каждого расчета с участием текущего ускорения, вычитаем начальное значение опорного ускорения. Это даст вам скорректированные значения ускорения с учетом того, как плеер держит свое устройство.

public class PlayerControll1 : MonoBehaviour { 
    .... 
    public Vector3 baseAcceleration; 

    // Use this for initialization 
    void Start() { 
     ... 
     baseAcceleration = Input.gyro.userAcceleration; 
    } 

    void FixedUpdate() { 

     float xi = Input.gyro.userAcceleration.x - baseAcceleration.x; 
     float yi = Input.gyro.userAcceleration.y - baseAcceleration.y; 

     ... 
    } 
} 
Смежные вопросы