- Home /
3rd player orientation using gyro with offset
Hi, I would like to control the orientation of my player with the gyro. I would also like to be able to add an offset (at the start with the compass true heading, and manually during the game with a finger swip, to correct the eventual drift of the gyro). My code is almost working but I got some problem that I can't resolve, I tried with Quaternion but it was a big fail as I'm still not very comfortable with it.
Thank you for advices
#pragma strict
import UnityEngine.UI;
static var playerGPS: GameObject;
static var gyroBool : boolean;
private var gyro : Gyroscope;
public var touchRotatesHeading : boolean = true;
private var screenSize : Vector2;
private var mouseStartPoint: Vector2;
private var headingAtTouchStart : float = 0;
var locationStatus:LocationServiceStatus;
static var initCompass: boolean=false;
static var refreshCompass: boolean=false;
private var heading : float = 0;
private var headingoffset : float = 0;
function Awake() {
gyroBool = SystemInfo.supportsGyroscope;
if (gyroBool) {
gyro = Input.gyro;
gyro.enabled = true;
Screen.sleepTimeout = SleepTimeout.NeverSleep;
} else {
#if UNITY_EDITOR
//print("NO GYRO");
#endif
}
}
function Start() {
screenSize.x = Screen.width;
screenSize.y = Screen.height;
Input.compass.enabled=true;
WaitInitialisation();
headingoffset=0;
}
function FixedUpdate () {
if(initCompass==true)
{
playerGPS=GameObject.Find("JAV_model_ete2015(Clone)");
heading=Input.compass.trueHeading;
headingoffset=heading-gyro.attitude.eulerAngles.x;
playerGPS.transform.eulerAngles = Vector3(0,heading,0);
initCompass=false;
}
GetTouchMouseInput();
if(Input.GetMouseButton(0)==true){
playerGPS.transform.eulerAngles = Vector3(0,heading,0);
}
else if(Input.GetMouseButtonUp(0)==true)
headingoffset=heading-gyro.attitude.eulerAngles.x;
else if(Input.GetMouseButton(0)==false){
if(0<gyro.attitude.eulerAngles.y&&gyro.attitude.eulerAngles.y<=180){
heading=gyro.attitude.eulerAngles.x+headingoffset;
heading = heading%360;
playerGPS.transform.eulerAngles = Vector3(0,heading,0);
}
else if(180<gyro.attitude.eulerAngles.y&&gyro.attitude.eulerAngles.y<=360){
heading=gyro.attitude.eulerAngles.x-headingoffset;
heading = heading%360;
playerGPS.transform.eulerAngles = Vector3(0,180-heading,0);
}
}
}
function GetTouchMouseInput() {
if(Input.GetMouseButtonDown(0)) {
mouseStartPoint = Input.mousePosition;
headingAtTouchStart = heading;
} else if (Input.GetMouseButton(0)) {
var delta : Vector2;
var mousePos = Input.mousePosition;
delta.x = (mousePos.x - mouseStartPoint.x)/screenSize.x;
delta.y = (mousePos.y - mouseStartPoint.y)/screenSize.y;
heading = (headingAtTouchStart+delta.x*100);
heading = heading%360;
}
}
function WaitInitialisation() {
yield WaitForSeconds(5);
initCompass=true;
}
Comment
Your answer
Follow this Question
Related Questions
3D camera relatively using gyro a la N.O.V.A. 2 0 Answers
Rotate Gameobject against Gyroscope in Z 0 Answers
can anyone find the issue with this code? 2 Answers
Input.gyro.attitude not working on newer Android devices 3 Answers
How to implement a mounted but movable headlight using the gyroscope? 1 Answer