/// <summary> /// Called every frame if the script is enabled. /// </summary> private void Update() { if (Input.GetKeyDown(ToggleKey)) { //Plugin.log.Debug("F detected."); if (!keyHeld) { var flyingController = GetFlyingController(); if (flyingController != null) { if (flyingController.enabled) { flyingController.enabled = false; //Plugin.log.Debug("Flying controller disabled."); if (VRCenter != null) { //Logger.log.Info($"Current Position:\n{TransformValuesString(VRCenter.gameObject.transform.position, VRCenter.gameObject.transform.rotation.eulerAngles)}"); VRCenter.ResetRoom(); if (RoomCenter != null && RoomRotation != null) { RoomCenter.value = LastPos; RoomRotation.value = LastRot.y; //Logger.log.Info($"Setting RoomCenter to LastPos:\n{TransformValuesString(LastPos, LastRot)}"); } //Logger.log.Info($"Switch back to old pos:\n{TransformValuesString(VRCenter.gameObject.transform.position, VRCenter.gameObject.transform.rotation.eulerAngles)}"); } } else { if (VRCenter != null) { LastPos = VRCenter.gameObject.transform.position; LastRot = VRCenter.gameObject.transform.rotation.eulerAngles; //Logger.log.Info($"Saving position:\n{TransformValuesString(LastPos, LastRot)}"); } flyingController.enabled = true; //Plugin.log.Debug("Flying controller enabled."); } } else { Plugin.log.Debug("FirstPersonFlyingController not found."); } keyHeld = true; } } else { keyHeld = false; } }
// Update is called once per frame void LateUpdate() { if (VRCenter.VRPresent) { Quaternion quatRot = VRCenter.rotation; Vector3 vecPos = VRCenter.position; Vector3 currHeadRot = headTransform.localRotation.eulerAngles; // output to listener //float scale = 0.1f; Vector3 optionalRigPosOffset = new Vector3(0, 0, 1); Vector3 optionalRigRotation = new Vector3(0, 180, 0); Vector3 recRigPosOffset = new Vector3(0, 0.055f, 0.1f); rotationNeeded = quatRot.eulerAngles; positionNeeded = vecPos; //camFindTransform.localPosition = -positionNeeded + (recRigPosOffset)/scale; //spineTransform.localRotation = Quaternion.Euler(Mathf.Atan(positionNeeded.z / distSpineToHead) / Mathf.PI * 180.0f, spineTransform.localRotation.eulerAngles.y, Mathf.Atan(positionNeeded.x / distSpineToHead) / Mathf.PI * 180.0f); riftZ = positionNeeded.z; riftY = positionNeeded.y + distHipsToHead; h = Mathf.Abs(distHipsToNeck - riftY); k = riftY - h - distHipsToSpine; p = Mathf.Sqrt(Mathf.Abs(Mathf.Pow(distSpineToNeck, 2) - Mathf.Pow(k, 2))); q = riftZ - p; //UnityEngine.Debug.Log("h: " + h + ", k: " + k + ", p: " + p + ", q: " + q ); //UnityEngine.Debug.Log("vecposz: " + vecPos.z); rotSpine = Mathf.Acos(k / distSpineToNeck) * Mathf.Rad2Deg; rotNeck = Mathf.Atan2(q, h) * Mathf.Rad2Deg; //UnityEngine.Debug.Log("spine: " + rotSpine); //UnityEngine.Debug.Log("neck: " + rotNeck); //spineTransform.localRotation = Quaternion.Euler(new Vector3(/*spineTransform.localRotation.eulerAngles.x*/0, spineTransform.localRotation.eulerAngles.y, rotSpine/* - 90*/)); //neckTransform.localRotation = Quaternion.Euler(new Vector3(rotNeck + 90, neckTransform.localRotation.eulerAngles.y, neckTransform.localRotation.eulerAngles.z)); // Possibly subtract/add sum of above rotations to headTransform cameraRigTransform.localRotation = Quaternion.Euler(-rotationNeeded /*+ optionalRigRotation*/); rotationNeeded.Set(rotationNeeded.x, rotationNeeded.y /*- rotNeck - rotSpine*/, rotationNeeded.z); headTransform.localRotation = Quaternion.Euler(/*initHeadRot +*/ currHeadRot + rotationNeeded); //cameraRigTransform.localPosition = -positionNeeded /*+ optionalRigPosOffset*/ + recRigPosOffset; //cameraRigTransform.localPosition = rigPos; //UnityEngine.Debug.Log(distSpineToHead); //UnityEngine.Debug.Log("HeadPos: " + vecPos); if (logging) { listener.WriteLine("HeadRotQuat: " + quatRot + ", HeadRotAngles: " + quatRot.eulerAngles); listener.WriteLine("HeadPos: " + vecPos); listener.WriteLine("CamRotQuat: " + cameraTransform.localRotation + ", CamRotAngles: " + cameraTransform.localRotation.eulerAngles); listener.WriteLine("CamPos: " + cameraTransform.localPosition); listener.WriteLine("spineRotQuat: " + spineTransform.localRotation + ", spineRotAngles: " + spineTransform.localRotation.eulerAngles + ", distSpineToNeck: " + distSpineToNeck); } /*if (Input.GetButtonDown("LeftShoulder")) * { * listener.WriteLine("----Looking Directly Left---"); * }*/ if (Input.GetButtonDown("LeftShoulder") && logging) { listener.WriteLine("----Leaning forward---"); } if (Input.GetButtonDown("LeftShoulder")) { VRCenter.Recenter(); listener.WriteLine("---Recentering InputTracking---"); } } }