Search Unity

  1. Tune in to get all the latest Unity news live from Berlin on June 19, 6pm CEST. Set up a YouTube reminder!
    Dismiss Notice
  2. Unity 2018.1 has arrived! Read about it here
    Dismiss Notice
  3. Scriptable Render Pipeline improvements, Texture Mipmap Streaming, and more! Check out what we have in store for you in the 2018.2 Beta.
    Dismiss Notice
  4. Improve your Unity skills with a certified instructor in a private, interactive classroom. Learn more.
    Dismiss Notice
  5. ARCore is out of developer preview! Read about it here.
    Dismiss Notice
  6. Magic Leap’s Lumin SDK Technical Preview for Unity lets you get started creating content for Magic Leap One™. Find more information on our blog!
    Dismiss Notice
  7. Want to see the most recent patch releases? Take a peek at the patch release page.
    Dismiss Notice

Need Help > Calibration for Android

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

  1. JeffJason

    JeffJason

    Joined:
    Sep 12, 2017
    Posts:
    21
    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. JeffJason

    JeffJason

    Joined:
    Sep 12, 2017
    Posts:
    21
    Still looking for it.
     
  3. JeffJason

    JeffJason

    Joined:
    Sep 12, 2017
    Posts:
    21
    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

    Unity Technologies

    Joined:
    May 2, 2017
    Posts:
    1,602