How to calibrate phone acceleratormeter data?
As the question states I would like some help on how to "calibrate" the accelerator data on you're phone so that the player can play the game at any angle he/she desires. I know there are many posts like these out there but I can't get any of the techiques working in my game and for the record I really don't understand them fully. An explanation of how this kind of stuff works would help me alot! This is my code I'd like to ad the calibration into:
using UnityEngine; using UnityEngine.UI; using System.Collections;
public class PlayerMovement : MonoBehaviour {
public float moveSpeed;
public float maxSpeed = 20;
float phoneSpeed = 10;
float currentSpeed;
public Score point;
private Rigidbody player;
// Use this for initialization
public void Start()
{
point = GetComponent<Score>();
player = GetComponent<Rigidbody>();
}
// Update is called once per frame
void FixedUpdate()
{
if UNITY_STANDALONE || UNITY_WEBPLAYER
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 move = new Vector3(moveHorizontal, 0.0f, moveVertical);
if (player.velocity.magnitude < maxSpeed)
{
player.AddForce(move * moveSpeed);
}
elif UNITY_ANDROID
Vector3 movement = Vector3.zero;
movement.x = Input.acceleration.x;
movement.z = -Input.acceleration.z;
if (movement.sqrMagnitude > 1)
{
movement.Normalize();
}
movement *= Time.deltaTime;
transform.Translate(movement * phoneSpeed);
endif
}
void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.tag == "Coin")
{
Destroy(collider.gameObject);
point.AddScore();
}
if (collider.gameObject.tag == "Goal")
{
GameManager.timeLeft = GameManager.timeLeft + 20;
LevelManager.NextLevel();
}
}
}`
Thanks!
Will not post it as answer cause I never tried something like that to be sure, but...
You can create a variable to save the "Zero" value, so everytime the user hit the "Reset Acceleration" (or something like that), you use that "Zero" value to calculate the relative acceleration. To be more precise, something like that:
Vector3 accelerationZero = Vector3.zero;
void ResetAcceleration()
{
accelerationZero = Input.acceleration;
}
Vector3 GetAcceleration()
{
return Input.acceleration - accelerationZero;
}
Your answer
Follow this Question
Related Questions
Is it possible to access the native step-counter on mobile platforms. 2 Answers
Trying to move UI Elements but they are not working 1 Answer
C# safe connect to MySQL database. Download and upload data via PHP script. 1 Answer
Loop animation by script without turning on loop on Animation Inspector 0 Answers
how can i use my phone's camera as a webcam and let unity recognize it as a connected webcam? 0 Answers