Search Unity

Need Help > Calibration for Android

Discussion in 'Scripting' started by FernandoAlonso, Sep 12, 2017.

  1. FernandoAlonso

    FernandoAlonso

    Joined:
    Sep 12, 2017
    Posts:
    34
    So i am making a game using sensors of phone.ı want to calibrate, so device can calculate the position of the phone on startup.
    This is the code;

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Hareket : MonoBehaviour {
    // Use this for initialization
    public Rigidbody rb;
    public float zhizi;


    void Start () {

    }

    // Update is called once per frame
    void FixedUpdate () {
    transform.Translate (Input.acceleration.x, -Input.acceleration.y, zhizi);
     
  2. FernandoAlonso

    FernandoAlonso

    Joined:
    Sep 12, 2017
    Posts:
    34
    Still looking for it.
     
  3. FernandoAlonso

    FernandoAlonso

    Joined:
    Sep 12, 2017
    Posts:
    34
    Found the solution;

    1. //declare matrix and calibration vector
    2. Matrix4x4 calibrationMatrix;
    3. Vector3 wantedDeadZone = Vector3.zero;

    4. //Method for calibration
    5. void calibrateAccelerometer()
    6. {
    7. wantedDeadZone = Input.acceleration;
    8. Quaternion rotateQuaternion = Quaternion.FromToRotation(new Vector3(0f, 0f, -1f), wantedDeadZone);
    9. //create identity matrix ... rotate our matrix to match up with down vec
    10. Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, rotateQuaternion, new Vector3(1f, 1f, 1f));
    11. //get the inverse of the matrix
    12. calibrationMatrix = matrix.inverse;
    13. }
    14. //Method to get the calibrated input
    15. Vector3 getAccelerometer(Vector3 accelerator){
    16. Vector3 accel = this.calibrationMatrix.MultiplyVector(accelerator);
    17. return accel;
    18. }
    19. //Finally how you get the accelerometer input
    20. Vector3 _InputDir;
    21. void Update()
    22. {
    23. _InputDir = getAccelerometer(Input.acceleration);
    24. //then in your code you use _InputDir instead of Input.acceleration for example
    25. transform.Translate (_InputDir.x, 0, -_InputDir.z);
    26. }
    27. //you also want to calibrate the device on start so regardless of how user is holding it the initial position will be treated as 0 Input.
    28. void Start()
    29. {
    30. calibrateAccelerometer();
    31. }
     
  4. JeffDUnity3D

    JeffDUnity3D

    Joined:
    May 2, 2017
    Posts:
    14,446