Question by
jigwiz · Mar 31, 2017 at 06:17 AM ·
movementaccelerometergyroscopez axis
Change sensitivity of Z rotation on game object
I have a character that is moving essentially the way I want but the rotation is responding to slow. How do I get the character to rotate quicker in response to the acceleration on device?:
public float smooth = 0.4f;
public float newRotation;
public float sensitivity = 0;
public float xSpeed = 0f;
public float ySpeed = 0f;
private Vector3 currentAcceleration, initialAcceleration;
//public float offSetY;
Matrix4x4 calibrationMatrix;
Vector3 wantedDeadZone = Vector3.zero;
void Start()
{
calibrate ();
initialAcceleration = Input.acceleration;
currentAcceleration = Vector3.zero;
}
void Update()
{
//Move character using gyro//
//Controls input speed
//transform.Translate (Input.acceleration.x * Xspeed, Input.acceleration.y * Yspeed, 0);
_InputDir = getAccelerometer(Input.acceleration);
//Controll character using accelerometer
transform.Translate (_InputDir.x * xSpeed, _InputDir.y * ySpeed, 0);
//Control character rotation
currentAcceleration = Vector3.Lerp(currentAcceleration, Input.acceleration - initialAcceleration, Time.deltaTime/smooth);
newRotation = Mathf.Clamp(currentAcceleration.x * sensitivity, -1, 1);
transform.Rotate(0, 0, -newRotation);
//Constrain character movement to viewport//
Vector3 boundaryVector = transform.position;
Vector3 pos = Camera.main.WorldToViewportPoint (transform.position);
pos.x = Mathf.Clamp01(pos.x);
pos.y = Mathf.Clamp01(pos.y);
pos.z = Mathf.Clamp (transform.position.z, 100, 50);
transform.position = Camera.main.ViewportToWorldPoint(pos);
}
void calibrate()
{
wantedDeadZone = Input.acceleration;
Quaternion rotateQuaternion = Quaternion.FromToRotation(new Vector3(0f, 0f, -1f), wantedDeadZone);
//create identity matrix ... rotate our matrix to match up with down vec
Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, rotateQuaternion, new Vector3(1f, 1f, 1f));
//get the inverse of the matrix
calibrationMatrix = matrix.inverse;
}
//Method to get the calibrated input
Vector3 getAccelerometer(Vector3 accelerator){
Vector3 accel = this.calibrationMatrix.MultiplyVector(accelerator);
return accel;
}
//Finally how you get the accelerometer input
Vector3 _InputDir;
}
Comment