Search Unity

  1. Engage, network and learn at Unite Austin 2017, Oct 3 - 5. Get your ticket today!
    Dismiss Notice
  2. Introducing the Unity Essentials Packs! Find out more.
    Dismiss Notice
  3. Check out all the fixes for 5.6 on the patch releases page.
    Dismiss Notice
  4. Unity 2017.1 is now released.
    Dismiss Notice
  5. Help us improve the editor usability and artist workflows. Join our discussion to provide your feedback.
    Dismiss Notice
  6. Unity 2017.2 beta is now available for download.
    Dismiss Notice

Need Help > Calibration for Android

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

  1. JeffJason

    JeffJason

    Joined:
    Sep 12, 2017
    Posts:
    8
    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:
    8
    Still looking for it.
     
  3. JeffJason

    JeffJason

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