Skip to content
This repository has been archived by the owner on Jul 22, 2024. It is now read-only.

Commit

Permalink
Merge pull request #306 from caseyyee/axis
Browse files Browse the repository at this point in the history
Cross platform controller support for Unity XR and WebVR.
  • Loading branch information
caseyyee authored Jun 27, 2018
2 parents 4da7c7b + 5cdbaf6 commit cde23e3
Show file tree
Hide file tree
Showing 22 changed files with 2,702 additions and 333 deletions.
83 changes: 48 additions & 35 deletions Assets/WebGLTemplates/WebVR/webvr.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,53 @@
});
}

function getVrGamepads(gamepads) {
var vrGamepads = []
for (var i = 0; i < gamepads.length; ++i) {
var gamepad = gamepads[i];
if (gamepad && (gamepad.pose || gamepad.displayId)) {
if (gamepad.pose.position && gamepad.pose.orientation) {
// flips gamepad axis to work with Unity.
var position = gamepad.pose.position;
position[2] *= -1;
var orientation = gamepad.pose.orientation;
orientation[0] *= -1;
orientation[1] *= -1;

vrGamepads.push({
index: gamepad.index,
hand: gamepad.hand,
buttons: getGamepadButtons(gamepad),
axes: getGamepadAxes(gamepad),
orientation: Array.from(orientation),
position: Array.from(position)
});
}
}
}
return vrGamepads;
}

function getGamepadButtons(gamepad) {
var buttons = [];
for (var i = 0; i < gamepad.buttons.length; i++) {
buttons.push({
pressed: gamepad.buttons[i].pressed,
touched: gamepad.buttons[i].touched,
value: gamepad.buttons[i].value
});
}
return buttons;
}

function getGamepadAxes(gamepad) {
var axes = [];
for (var i = 0; i < gamepad.axes.length; i++) {
axes.push(gamepad.axes[i]);
}
return axes;
}

function onAnimate () {
if (!vrDisplay && gameInstance.vrDisplay) {
frameData = new VRFrameData();
Expand Down Expand Up @@ -201,47 +248,13 @@
}
mat4.transpose(sitStand, sitStand);

// gamepads
gamepads = navigator.getGamepads();
vrGamepads = [];
for (var i = 0; i < gamepads.length; ++i) {
var gamepad = gamepads[i];
if (gamepad && (gamepad.pose || gamepad.displayId)) {
if (gamepad.pose.position && gamepad.pose.orientation) {
// flips gamepad axis to work with Unity.
var position = gamepad.pose.position;
position[2] *= -1;
var orientation = gamepad.pose.orientation;
orientation[0] *= -1;
orientation[1] *= -1;

var buttons = [];
for (var j = 0; j < gamepad.buttons.length; j++) {
buttons.push({
pressed: gamepad.buttons[j].pressed,
touched: gamepad.buttons[j].touched,
value: gamepad.buttons[j].value
});
}

vrGamepads.push({
index: gamepad.index,
hand: gamepad.hand,
buttons: buttons,
orientation: Array.from(orientation),
position: Array.from(position)
});
}
}
}

var vrData = {
leftProjectionMatrix: Array.from(leftProjectionMatrix),
rightProjectionMatrix: Array.from(rightProjectionMatrix),
leftViewMatrix: Array.from(leftViewMatrix),
rightViewMatrix: Array.from(rightViewMatrix),
sitStand: Array.from(sitStand),
controllers: vrGamepads
controllers: getVrGamepads(navigator.getGamepads())
};

gameInstance.SendMessage('WebVRCameraSet', 'OnWebVRData', JSON.stringify(vrData));
Expand Down
69 changes: 69 additions & 0 deletions Assets/WebVR/Models/TakeL.controller
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: TakeL
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 1107335396987614582}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1102 &1102756554104886100
AnimatorState:
serializedVersion: 5
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Take
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 013217fcf4bba4f3380d9159876fa8ea, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1107 &1107335396987614582
AnimatorStateMachine:
serializedVersion: 5
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Base Layer
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 1102756554104886100}
m_Position: {x: 312, y: 24, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 312, y: 132, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 1102756554104886100}
8 changes: 8 additions & 0 deletions Assets/WebVR/Models/TakeL.controller.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 69 additions & 0 deletions Assets/WebVR/Models/TakeR.controller
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!91 &9100000
AnimatorController:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: TakeR
serializedVersion: 5
m_AnimatorParameters: []
m_AnimatorLayers:
- serializedVersion: 5
m_Name: Base Layer
m_StateMachine: {fileID: 1107335396987614582}
m_Mask: {fileID: 0}
m_Motions: []
m_Behaviours: []
m_BlendingMode: 0
m_SyncedLayerIndex: -1
m_DefaultWeight: 0
m_IKPass: 0
m_SyncedLayerAffectsTiming: 0
m_Controller: {fileID: 9100000}
--- !u!1102 &1102869512511796832
AnimatorState:
serializedVersion: 5
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Take
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: c99aacc3accab4fdaadab5e3ea13b9c7, type: 3}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1107 &1107335396987614582
AnimatorStateMachine:
serializedVersion: 5
m_ObjectHideFlags: 1
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_Name: Base Layer
m_ChildStates:
- serializedVersion: 1
m_State: {fileID: 1102869512511796832}
m_Position: {x: 288, y: 24, z: 0}
m_ChildStateMachines: []
m_AnyStateTransitions: []
m_EntryTransitions: []
m_StateMachineTransitions: {}
m_StateMachineBehaviours: []
m_AnyStatePosition: {x: 50, y: 20, z: 0}
m_EntryPosition: {x: 50, y: 120, z: 0}
m_ExitPosition: {x: 312, y: 132, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 1102869512511796832}
8 changes: 8 additions & 0 deletions Assets/WebVR/Models/TakeR.controller.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 30 additions & 3 deletions Assets/WebVR/Models/handL.dae.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 30 additions & 3 deletions Assets/WebVR/Models/handR.dae.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit cde23e3

Please sign in to comment.