void RpcInteractorDirty(Vector3 velocity, Vector3 angularVelocity, bool isLeftHand) { if (hasAuthority) { return; } GameObject targetObject = isLeftHand ? leftHand : rightHand; if (targetObject == null) { return; } VRInteractorRemote interactor = targetObject.GetComponent <VRInteractorRemote>(); if (interactor == null) { return; } interactor._velocity = velocity; interactor._angularVelocity = angularVelocity; }
/// <summary> /// Strip the SteamVR or Oculus camera rig and add the remote scripts /// for receiving input. /// </summary> public void ConvertToRemoteRig() { if (remoteRig) { return; } remoteRig = true; Component[] components = GetComponentsInChildren <Component>(true); foreach (Component comp in components) { if (comp == null || !CanDestroyType(comp) || !comp.gameObject.CanDestroy(comp.GetType())) { continue; } if (comp.GetType().IsSubclassOf(typeof(VRInput))) { VRInputRemote inputRemote = comp.gameObject.AddComponent <VRInputRemote>(); // Initial Sync VRInput originalInput = (VRInput)comp; inputRemote.VRActions = originalInput.VRActions; inputRemote._isSteamVR = originalInput.isSteamVR(); inputRemote._hmdType = originalInput.hmdType; inputRemote._leftHand = originalInput.LeftHand; if (originalInput.LeftHand) { leftHand = comp.gameObject; } else { rightHand = comp.gameObject; } inputRemote.triggerKey = originalInput.triggerKey; inputRemote.padTop = originalInput.padTop; inputRemote.padLeft = originalInput.padLeft; inputRemote.padRight = originalInput.padRight; inputRemote.padBottom = originalInput.padBottom; inputRemote.padCentre = originalInput.padCentre; inputRemote.padTouch = originalInput.padTouch; inputRemote.gripKey = originalInput.gripKey; inputRemote.menuKey = originalInput.menuKey; inputRemote.AXKey = originalInput.AXKey; inputRemote.triggerKeyOculus = originalInput.triggerKeyOculus; inputRemote.padTopOculus = originalInput.padTopOculus; inputRemote.padLeftOculus = originalInput.padLeftOculus; inputRemote.padRightOculus = originalInput.padRightOculus; inputRemote.padBottomOculus = originalInput.padBottomOculus; inputRemote.padCentreOculus = originalInput.padCentreOculus; inputRemote.padTouchOculus = originalInput.padTouchOculus; inputRemote.gripKeyOculus = originalInput.gripKeyOculus; inputRemote.menuKeyOculus = originalInput.menuKeyOculus; inputRemote.AXKeyOculus = originalInput.AXKeyOculus; } if (comp.GetType().IsSubclassOf(typeof(VRInteractor))) { VRInteractorRemote interactorRemote = comp.gameObject.AddComponent <VRInteractorRemote>(); //Initial Sync VRInteractor originalInteractor = (VRInteractor)comp; interactorRemote.useHoverLine = originalInteractor.useHoverLine; if (originalInteractor.useHoverLine) { interactorRemote.hoverLineMat = originalInteractor.hoverLineMat; } interactorRemote.hideControllersWhileHolding = originalInteractor.hideControllersWhileHolding; interactorRemote.controllerAnchor = originalInteractor.controllerAnchor; interactorRemote.controllerAnchorOffset = originalInteractor.controllerAnchorOffset; interactorRemote.ikTarget = originalInteractor.ikTarget; interactorRemote.forceGrabDirection = originalInteractor.forceGrabDirection; interactorRemote.forceGrabDistance = originalInteractor.forceGrabDistance; } Destroy(comp); } foreach (Component comp in components) { if (comp == null || !CanDestroyType(comp)) { continue; } Destroy(comp); } if (leftHand != null) { leftHand.SetActive(true); } if (rightHand != null) { rightHand.SetActive(true); } }