I'm trying to rotate an object based on an object with a tilt sensor connected via USB.
The accelerometer outputs a signed 16 bits for x,y,z, which I then convert to an angle.
fAngleX = (float) (atan2(nAccelY, nAccelZ)+M_PI)*RAD_TO_DEG;
fAngleY = (float) (atan2(nAccelZ, nAccelX)+M_PI)*RAD_TO_DEG;
I've searched and tried different ways of doing it*, but the object (.STEP) never rotates consistently, instead it quickly jumps all over the place as I rotate the device. As a test, I drew it in Processing and superman tracks the physical object fine.
http://imgur.com/0GDpMZ4
Maybe its better to use the raw value (not my computed angle) but not sure how else to do it.
*
float Angle = 30f;
vector3 Axis = vector3.cross(MoveDirection.normalized, PlayerShip.transform.up);
Playership.transform.Rotate(Axis, Angle);
myTransform.rotation = Quaternion.Slerp(myTransform.rotation, targetRotation, slerpSpeedValue);
and
*
dir.y = Input.acceleration.y;
if (dir.y > .2)
transform.Rotate(Vector3.up * (-rotSpeed * Time.deltaTime), Space.World);
else if (dir.y < -.2)
transform.Rotate(Vector3.up * (rotSpeed * Time.deltaTime), Space.World);
and
*
accel = Vector3.Lerp(accel, Input.acceleration, filter * Time.deltaTime); // smooth filter
var dir = Vector3(-accel.y, accel.x, 0); // map accel -Y and X to game X and Y directions
if (dir.sqrMagnitude > 1) dir.Normalize(); // limit dir vector to magnitude 1
transform.Translate(dir * speed * Time.deltaTime); // move the object at the velocity defined in speed
h = Input.GetAxis("Horizontal")*multiplier;
v = Input.GetAxis("Vertical")*multiplier;
transform.rotation = Quaternion.EulerAngles(new Vector3(h,0f,v));
↧