În Unity pe Android, cum pot roti un obiect cu ajutorul accelerometrului? (Dezvoltarea jocurilor, Unitate, Android, Accelerometru)

Chris a intrebat.

Fac un joc în care controlezi o platformă cu bile care cad pe ea, iar tu trebuie să echilibrezi bilele și să le împiedici să cadă. În prezent, folosesc un mouse pentru a o controla cu acest cod:

transform.rotation.eulerAngles.z += Input.GetAxisRaw("Mouse X");
transform.rotation.eulerAngles.x += Input.GetAxisRaw("Mouse Y");

Încerc să fac din acest lucru o aplicație Android și vreau să folosesc controale de mișcare pentru a putea înclina dispozitivul, ca și cum ar fi vorba de platformă. M-am gândit să folosesc accelerometrul pentru asta.

Aveți vreo idee despre cum să fac acest lucru în Unity?

Comentarii

  • Unity înfășoară accelerometrul. O mulțime de link-uri și exemple–  > Por Sergio.
  • Din punct de vedere pedant, rotația unui dispozitiv este detectată cu ajutorul unui giroscop, nu al unui accelerometru (deși acestea sunt adesea combinate într-un singur cip). Primul detectează accelerația unghiulară, în timp ce al doilea detectează accelerația liniară.  > Por bcrist.
  • @Sergio Am încercat să folosesc documentația, dar nu a funcționat pentru mine. Poți să dai câteva exemple de cod?-  > Por Chris.
  • @bcrist Se pare că majoritatea dispozitivelor nu au un giroscop. Galaxy S3 al meu se pare că are, iar un cod pe care l-am scris cu giroscopul nu a funcționat. Poți să dai niște cod?-  > Por Chris.
  • @Chris Nu am făcut niciodată dezvoltare mobilă cu Unity; experiența mea cu accel/gyro vine din programarea embedded (microcontroler). Dacă nu aveți un giroscop, se poate simula prin filtrarea low-pass a ieșirii accelerometrului, pornind de la ipoteza că, de cele mai multe ori, gravitația este singura forță semnificativă detectată. Chiar și cu un giroscop, de obicei doriți să îl combinați cu această tehnică – giroscopul este mai precis, dar detectează doar rotația relativă, deci va derapa fără o referință absolută.  > Por bcrist.
1 răspunsuri
Lună candidă _Max_

Actualizare:După cum a menționat @Philipp în secțiunea de comentarii, Input.gyro este cel mai probabil ceea ce căutați. Dar acesta este un giroscop, dacă vrei să folosești accelerometru, atunci răspunsul este mai jos. Accelerometrul poate fi de asemenea utilizat pentru a determina rotația în conformitate cu acest lucru: https://stackoverflow.com/a/5670134/6603717 .

Input.gyro


public class AccelerometerRotation : MonoBehaviour
{
    [SerializeField] private float _speed = 5f;

    private void Update()
    {
        Vector3 accRotation = new Vector3 (Input.acceleration.x, 0.0f, Input.acceleration.y);
        this.transform.Rotate(accRotation * this._speed * Time.deltaTime);
    }
}

Input.acceleration

Transformare.Rotire

Comentarii

  • În conformitate cu documentația, Input.acceleration detectează translația dispozitivului. Cred că ceea ce aveți nevoie de fapt pentru a detecta rotația dispozitivului este Input.gyro.attitude. Dar, de obicei, nu dezvolt jocuri mobile, așa că s-ar putea să mă înșel.  > Por Philipp.