Assuming you are able to read the magnet input correctly. This is how I did an FPS style controller script:
- In Unity5 import the asset package Standard Assets/Characters.
- Create an instance of RigidBodyFPSController.prefab from that package.
- Remove it's child object, "MainCamera"
- Import the Google cardboard unitypackage.
- Replace the "MainCamera" you removed in step #3 with CardboardMain.prefab
- Update or modify a copy of RigidbodyFirstPersonController.cs GetInput() method.
GetInput() with Google Cardboard forward movement fallback:
private Vector2 GetInput()
{
Vector2 input = new Vector2
{
x = Input.GetAxis("Horizontal"),
y = Input.GetAxis("Vertical")
};
// If GetAxis are empty, try alternate input methods.
if (Math.Abs(input.x) + Math.Abs(input.y) < 2 * float.Epsilon)
{
if (IsMoving) //IsMoving is the flag for forward movement. This is the bool that would be toggled by a click of the Google cardboard magnet
{
input = new Vector2(0, 1); // go straight forward by setting positive Vertical
}
}
movementSettings.UpdateDesiredTargetSpeed(input);
return input;
}
Google's SDK only support's detecting a magnet "click". If you want to hold down the magnet to move forward, I recommend using Cardboard Controls+ from the Unity3D Asset Store.
OnCardboardTrigger(), and inside that function you would put your movement control. As far as I can tell, this function would fire for every frame you have the button down so that movement control could be as simple astransform.position += transform.forward * Time.deltaTime * speed;- Agumander