- Home /
Accelerometer start position
Hello,
I'm making a 2D mobile game where I have an object that's moving with accelerometer. I'm using translate for this:
transform.Translate (Input.acceleration.x, Input.acceleration.y, 0);
But the starting default position for this is when my phone lies horizontally. I want to make this starting position when you hold your phone as usual (about 60 degrees to the ground). How can I do that?
I'm not familiar with accelerometer and don't have one on hand to test with but perhaps try something like this (note it is pseudo-code):
Vector3 input = new Vector3(Input.acceleration.x, Input.acceleration.y, 0);
Vector3 inputAt60Degrees = (The input given at 60 degrees);
transform.Translate(input - inputAt60Degrees);
Answer by Totalys · May 12, 2015 at 09:21 PM
I think this should solve your issue:
using UnityEngine;
using System.Collections;
public class AccelerometerInput : MonoBehaviour {
public float Speed; // 10 is a good number to this variable.
private Vector3 dirInit = Vector3.zero;
void Start()
{
dirInit.z = Input.acceleration.z;
dirInit.x = Input.acceleration.x;
}
// Update is called once per frame
void Update () {
Vector3 dir = Vector3.zero;
// you need to send the difference of your current accelerometer position to the initial state.
dir.x = Input.acceleration.x - dirInit.x;
dir.z = Input.acceleration.z - dirInit.z;
if (dir.sqrMagnitude > 1)
dir.Normalize();
dir *= Time.deltaTime;
transform.Translate(dir * Speed);
}
}
@Totalys Thanks a lot! Was looking for the same thing and your answer solved my problem!
Your answer
Follow this Question
Related Questions
accelerometer speed 1 Answer
How To Use The Accelerator of Smartphone? 0 Answers
Moving object with tilting the device. 1 Answer
Scale using accelerometer with limits 0 Answers
Using the accelerometer to move a player as the real user walks 2 Answers