Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice

Reset Accelerometer? Is it possible?

Discussion in 'iOS and tvOS' started by sbuchbinder, Nov 7, 2008.

  1. huxley

    huxley

    Joined:
    Apr 27, 2009
    Posts:
    334
    I just ended up putting the FixAcceleration function in the control script and it was much easier to access.
     
  2. se7en

    se7en

    Joined:
    Dec 3, 2008
    Posts:
    232
    Thanks Fuel Games guys and Little Angel - I need to calibrate the accelerometer and had no idea how to do it. I dropped your script into my Game Engine and my UI HUD controller... literally 5 minutes later, it's perfect. I cannot say thank you enough around here - Unity FTW : )
     
  3. Adam-Buckner

    Adam-Buckner

    Joined:
    Jun 27, 2007
    Posts:
    5,664
  4. stockydog

    stockydog

    Joined:
    Dec 24, 2010
    Posts:
    9
    Thanks cheezorg. If you are still around on these forums I appreciate your solution. This works great.
     
  5. rustbucket

    rustbucket

    Joined:
    Jul 14, 2013
    Posts:
    2
    I realize this thread is kind of old but I'm having difficulties getting the "fix" from Fuel Games to work with my existing script (Sorry there's a bunch of logic in there to find platform and requested input type). I suspect its where I'm trying to get the calibrated vaue but I'm not sure. Normally I write in Unity.js so it could also be my C# translation skills aren't up to the task.

    At any rate any help would be appreciated, thanks in advance!

    r.

    Code (csharp):
    1.  
    2.     void calibrateAccelerometer() {
    3.         Vector3 wantedDeadZone = iPhoneInput.acceleration;
    4.         Quaternion rotateQuaternion = Quaternion.FromToRotation(new Vector3(0f, 0f, -1f), wantedDeadZone);
    5.    
    6.         //create identity matrix ... rotate our matrix to match up with down vec
    7.         Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, rotateQuaternion, new Vector3(1f, 1f, 1f));
    8.         //get the inverse of the matrix
    9.         this.calibrationMatrix = matrix.inverse;
    10.     }
    11.    
    12.     Vector3 getAccelerometer(Vector3 accelerator) {
    13.         Vector3 accel = this.calibrationMatrix.MultiplyVector(accelerator);
    14.         return accel;
    15.     }
    16.    
    17.    
    18.     void Update ()
    19.     {  
    20.         Vector3 forward = Camera.main.transform.TransformDirection(Vector3.forward);
    21.         forward.y = 0;
    22.         forward = forward.normalized;
    23.        
    24.         Vector3 forwardForce = new Vector3();
    25.        
    26.         if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android)
    27.         {
    28.             if(tiltControls == 0) {
    29.                 //tilt off
    30.                 float tmpSpeed = moveJoy.GetComponent<Joystick>().position.y;
    31.                 forwardForce = forward * tmpSpeed * 1f * moveSpeed;
    32.             } else {
    33.                 //tilt on
    34.                 float tmpSpeed = Input.acceleration.y *8;              
    35.                 forwardForce = forward * tmpSpeed * 1f * moveSpeed;
    36.                 getAccelerometer(forwardForce);
    37.             }  
    38.            
    39.         }
    40.         else
    41.         {
    42.             forwardForce = forward * Input.GetAxis("Vertical") * moveSpeed;
    43.         }
    44.         rigidbody.AddForce(forwardForce);
    45.  
     
  6. Issah

    Issah

    Joined:
    Jun 3, 2014
    Posts:
    2
  7. Basyan

    Basyan

    Joined:
    May 31, 2015
    Posts:
    5
    As in my case execute calibration, week I am puzzled with this question, helps nothing.
    Code (CSharp):
    1.  void Start () {
    2.      mainCamera = Camera.main.transform;
    3.      thisRigidbody = GetComponent<Rigidbody>();
    4. }
    5. void Update () {
    6.  
    7.      float h = (Input.acceleration.x);
    8.      float v = (-Input.acceleration.z);
    9.    
    10.      if (mainCamera != null)
    11.      {
    12.          mainCameraForward = Vector3.Scale (mainCamera.forward, new Vector3 (1, 0, 1));
    13.          move = (v * mainCameraForward + h * mainCamera.right);
    14.      }
    15.      else
    16.      {
    17.          move = (v * Vector3.forward + h * Vector3.right);
    18.      }
    19.      if (useTorque)
    20.      {
    21.          thisRigidbody.AddTorque(new Vector3(move.z, 0, -move.x) * moveSpeed);
    22.      }
    23.      else
    24.      {
    25.          thisRigidbody.AddForce(move * moveSpeed);
    26.      }
    27. }
     
  8. sputnikbar

    sputnikbar

    Joined:
    Jan 3, 2013
    Posts:
    78
    Hi,

    sorry for Necro posting, but I can't adapt this code to my needs :
    Here, I want to change the Physics.gravity with the accelerometer (for a classic Roll-a-ball game). Here's what I've tried :
    Code (CSharp):
    1.     void Start(){
    2.  
    3.         GravityStart = new Vector3 (
    4.             Mathf.Clamp (Input.acceleration.x, -1, 1),
    5.             Mathf.Clamp (Input.acceleration.z, -0.05f, 0.05f),
    6.             Mathf.Clamp (Input.acceleration.y, -1, 1)
    7.         ) * g;
    8.         Quaternion rotateQ = Quaternion.FromToRotation (new Vector3 (0f, 0f, -1f), GravityStart);
    9.         Matrix4x4 matrix = Matrix4x4.TRS (Vector3.zero, rotateQ, new Vector3 (1f, 1f, 1f));
    10.         this.calibrationMatrix = matrix.inverse;
    11.     }
    12.  
    13.     Vector3 getAccelerometer(Vector3 accelerator){
    14.         Vector3 accel = this.calibrationMatrix.MultiplyVector (accelerator);
    15.         return accel;
    16.     }
    17.     void Update() {
    18.         // normalize axis
    19.         Physics.gravity = new Vector3 (
    20.             Mathf.Clamp (Input.acceleration.x, -1, 1),
    21.             Mathf.Clamp (Input.acceleration.z, -0.05f, 0.05f),
    22.             Mathf.Clamp (Input.acceleration.y, -1, 1)
    23.         ) * g;
    24. Physics.gravity=getAccelerometer(Physics.gravity);
    25. }
    Has anyone an idea ?
    all the best,
    L.