private void FixedUpdate() { if (!localPlayer.IsPlayerGrounded())//only does anything if in the air. { float ForwardThrust = Mathf.Max(Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger"), Input.GetKey(KeyCode.F) ? 1 : 0); float UpThrust = Mathf.Max(Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger"), Input.GetKey(KeyCode.Space) ? 1 : 0); Vector3 PlayerVel = localPlayer.GetVelocity(); Quaternion newrot; Vector3 NewForwardVec; if (InVR) { newrot = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation *Quaternion.Euler(0, 60, 0); NewForwardVec = newrot * Vector3.forward; } else//Desktop { newrot = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation; NewForwardVec = newrot * (Vector3.forward); } //get backwards amount float BackThrustAmount = -((Vector3.Dot(PlayerVel, NewForwardVec)) * BackThrustStrength); NewForwardVec = NewForwardVec * ThrustStrength * ForwardThrust * Mathf.Max(1, (BackThrustAmount * ForwardThrust)); Vector3 NewUpVec = ((Vector3.up * ThrustStrength) * UpThrust); localPlayer.SetVelocity(PlayerVel + NewForwardVec + NewUpVec); } }
/// <summary> /// When the elevator doors are already half closed while closing, this function is called /// </summary> public void EventHalfClosedOnClosing(int elevatorNumber) { Debug.Log("[ElevatorController] Received Event HalfClosedOnClosing"); BoxCollider inDoorCollider; GameObject elevatorObj; BoxCollider doorCollider; if (elevatorNumber == 0) { inDoorCollider = _playerInsideDoorElevator1Detector; elevatorObj = _elevator1; doorCollider = _elevator1DoorCollider; } else if (elevatorNumber == 1) { inDoorCollider = _playerInsideDoorElevator2Detector; elevatorObj = _elevator2; doorCollider = _elevator2DoorCollider; } else { inDoorCollider = _playerInsideDoorElevator3Detector; elevatorObj = _elevator3; doorCollider = _elevator3DoorCollider; } //Check if player is inside the door and teleport him/her if that is the case if (inDoorCollider.bounds.Contains(_localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position)) { _localPlayer.TeleportTo(elevatorObj.transform.position, _localPlayer.GetRotation()); } doorCollider.enabled = true; }
private void LateUpdate() { float Trigger; if (UseLeftTrigger) { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger"); } else { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger"); } if (Trigger > 0.75) { Vector3 handpos = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position; handpos = VehicleTransform.InverseTransformDirection(handpos); if (!TriggerLastFrame) { VTOLZeroPoint = handpos.z; VTOLTemp = EngineControl.VTOLAngle; } float VTOLAngleDifference = (VTOLZeroPoint - handpos.z) * -ThrottleSensitivity; EngineControl.VTOLAngleInput = Mathf.Clamp(VTOLTemp + VTOLAngleDifference, 0, 1); TriggerLastFrame = true; } else { TriggerLastFrame = false; } }
private void TickDeathProcess() { currentRespawnTimer = currentRespawnTimer - Time.fixedDeltaTime; player.TeleportTo(lastPosition, player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation); if (currentRespawnTimer < 0F) { if (respawnPos != null) { player.TeleportTo(respawnPos.position, respawnPos.rotation); Debug.Log($"CombatSystem: Teleported {player.displayName} to respawn position of {respawnPos.position}."); } currentRespawnTimer = respawnTimer; Debug.Log($"CombatSystem: {player.displayName} is now able to move."); float maxHp = float.Parse(player.GetPlayerTag("combat_max_hp")); player.SetPlayerTag("combat_hp", $"{maxHp}"); inDeathProcess = false; } player.SetPlayerTag("combat_respawn_timer", $"{currentRespawnTimer}"); }
private void LateUpdate() { AwakeTimer += Time.deltaTime; CalibrateTimer += Time.deltaTime; if (CalibrateTimer > .3f) //do it about 3 times a second so we don't send too many broadcasts { if (localPlayer == null) //find test object relative position for editor testing { TargetRelative = TargetHeight.InverseTransformPoint(PositionTest.position); } else//find head relative position ingame { TargetRelative = TargetHeight.InverseTransformPoint(localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position); } CalibrateY(); if (CalibrateFowardBack == true) { CalibrateZ(); } else { CalibratedZ = true; } if (CalibratedY && CalibratedZ) { gameObject.SetActive(false); } CalibrateTimer = 0; } }
private void LateUpdate() { if (followedPlayerApi != null) { transform.position = followedPlayerApi.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position + Vector3.up * 2f; } }
private void SetToMostPreciseFingerPosition(Transform target, VRCPlayerApi.TrackingDataType trackingDataType, HumanBodyBones bone1, HumanBodyBones bone2, HumanBodyBones bone3) { Vector3 positionHead = _player.GetBonePosition(bone3); Vector3 positionTail = _player.GetBonePosition(bone2); if (positionHead != Vector3.zero) { target.position = positionHead; target.rotation = Quaternion.LookRotation(positionHead - positionTail); return; } positionHead = positionTail; positionTail = _player.GetBonePosition(bone1); if (positionHead != Vector3.zero) { target.position = positionHead; target.rotation = Quaternion.LookRotation(positionHead - positionTail); return; } VRCPlayerApi.TrackingData trackingData = _player.GetTrackingData(trackingDataType); positionHead = positionTail; positionTail = trackingData.position; if (positionHead != Vector3.zero) { target.position = positionHead; target.rotation = Quaternion.LookRotation(positionHead - positionTail); return; } target.position = trackingData.position; target.rotation = trackingData.rotation; }
public void Update() { if (!editorMode && vrEnabled == localPlayer.IsUserInVR()) { VRCPlayerApi.TrackingData data = localPlayer.GetTrackingData(trackingType); transform.SetPositionAndRotation(data.position, data.rotation); } }
private void VrPlayerInputRotationUpdate() { VRCPlayerApi.TrackingData rightHand = localUser.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand); Vector3 wantedForward = (new Vector3(rightHand.position.x, 0, rightHand.position.z) - new Vector3(transform.position.x, 0, transform.position.z)).normalized; Quaternion wantedRotation = Quaternion.LookRotation(wantedForward, Vector3.up); transform.rotation = Quaternion.Lerp(transform.rotation, wantedRotation, RotationMultiplier * Time.deltaTime); }
private void LateUpdate() { // PlayerApi data will only be valid in game so we don't run the update if we're in editor if (isInEditor) { return; } VRCPlayerApi.TrackingData trackingData = playerApi.GetTrackingData(trackingTarget); transform.SetPositionAndRotation(trackingData.position, trackingData.rotation); }
public void Play() { if (isNotInit) { return; } VRCPlayerApi player = Networking.GetOwner(gameObject); //Update avatar height if (Time.time - lastAvatarHeightUpdate > 10) { avatarHeight = GetAvatarHeight(player); lastAvatarHeightUpdate = Time.time; transform.localScale = Vector3.one * avatarHeight; float pitch = -Mathf.Log(avatarHeight * 0.1f) * 0.4f + 0.2f; pitch = Mathf.Clamp(pitch, 0.2f, 3f); float volume = avatarHeight * 0.3f + 0.5f; volume = Mathf.Clamp(volume, 0.5f, 1f); float distance = avatarHeight * 2; distance = Mathf.Clamp(distance, 1, 10); _audioSource.pitch = pitch; _audioSource.maxDistance = distance; _audioSource.volume = volume; Debug.Log($"[Clapper] Height: {avatarHeight} => pitch: {pitch} => volume: {volume} => distance: {distance}"); } //Set position if (player.IsUserInVR()) { transform.position = Vector3.Lerp(player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position, player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position, 0.5f); } else { transform.position = isHumanoid ? player.GetBonePosition(HumanBodyBones.Chest) : Vector3.Lerp(player.GetPosition(), player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position, 0.7f); } transform.rotation = player.GetRotation(); //Play particle and audio source _particleSystem.Emit(1); _audioSource.Play(); }
public override void PostLateUpdate() { //Roation transform.rotation = player.GetTrackingData(trackingDataType).rotation; transform.Rotate(0, 55, 0); //Position Vector3 handPosition = player.GetBonePosition(finger); if (handPosition == Vector3.zero) { handPosition = player.GetBonePosition(hand); } if (handPosition == Vector3.zero) { handPosition = player.GetTrackingData(trackingDataType).position; } //Velcoity _velocity = (transform.position - handPosition) / Time.deltaTime; //Set position transform.position = handPosition; }
private void Update() { if (follow) { if (!Utilities.IsValid(owner) || !owner.IsOwner(gameObject)) { owner = Networking.GetOwner(gameObject); } sign.SetPositionAndRotation(owner.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position + new Vector3(0, offset, 0), owner.GetRotation()); } }
public void Move2Forward() { var dv = velocity - lastVelocity; var trackingData = p.GetTrackingData(trackingTarget); if (trackingData.Equals(null)) { return; } var h2v = trackingData.rotation * Quaternion.Inverse(p.GetRotation()); // horizon to view dv = h2v * dv; //dv = ((p.GetWalkSpeed() - 0.1f) * Mathf.Max(drag, 1) * Time.deltaTime) * dv.normalized; // cancel drag effect velocity = lastVelocity + dv; }
private void Update() { if (!active) { return; } if (target == null) { return; } var tData = target.GetTrackingData(source); var tPos = tData.position; var tRot = tData.rotation; transform.SetPositionAndRotation(tPos, tRot); }
private void FixedUpdate() { if (isEditor || isDesktop) { return; } var tData = player.GetTrackingData(source); if (trackPosition) { var tPos = tData.position; rb.velocity *= 0.65f; var posDelta = tPos - rb.worldCenterOfMass; var velocity = posDelta / Time.fixedDeltaTime; if (!float.IsNaN(velocity.x)) { rb.velocity += velocity; } } if (trackRotation) { var tRot = tData.rotation; rb.angularVelocity *= 0.65f; var rotationDelta = tRot * Quaternion.Inverse(rb.rotation); float angleInDegrees; Vector3 rotationAxis; rotationDelta.ToAngleAxis(out angleInDegrees, out rotationAxis); if (angleInDegrees > 180) { angleInDegrees -= 360; } if (Mathf.Abs(angleInDegrees) > Mathf.Epsilon) { var angularVelocity = rotationAxis * (angleInDegrees * Mathf.Deg2Rad) / Time.fixedDeltaTime; if (!float.IsNaN(angularVelocity.x)) { rb.angularVelocity += angularVelocity * rb.angularDrag; } } } }
// 視線追従 private void OnAnimatorIK(int layerIndex) { if (!targetik) { return; } Vector3 lookpos = Vector3.zero; float ikbody_new = ikbody; float ikhead_new = ikhead; if (selected > 0 && state >= 2 && state <= 3) // 拾いに行くまで { // ボールを見る if (_tgroot.transform.GetChild(selected - 1) != null && agent.remainingDistance < 3.0f) //目標がセットされ距離が3m以内 { lookpos = _tgroot.transform.GetChild(selected - 1).transform.position; } } if (selected > 0 && state >= 6 && state <= 8) // 渡すとき、なでなで、終了 { // ボールを投げた人(Owner)の頭を見る GameObject ball = _tgroot.transform.GetChild(selected - 1).gameObject; VRCPlayerApi owner = Networking.GetOwner(ball); if (owner != null) { lookpos = owner.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position; // オーナーの頭位置 } ikbody_new = 0.1f; // 体は曲げない if (state == 8) // 終了時(なでなで有効時間内) { ikbody_new = 0f; ikhead_new = 0f; } } if (lookpos != Vector3.zero) { //animator.SetLookAtWeight(ikall, ikbody_new, ikhead, ikeye, ikmotion); // 全体,体,頭,目,モーション animator.SetLookAtWeight(Soft(ikall, 0), Soft(ikbody_new, 1), Soft(ikhead_new, 2), Soft(ikeye, 3), Soft(ikmotion, 4)); animator.SetLookAtPosition(lookpos); } }
public float GetAvatarHeight(VRCPlayerApi player) { float height = 0; Vector3 postition1 = player.GetBonePosition(HumanBodyBones.Head); Vector3 postition2 = player.GetBonePosition(HumanBodyBones.Neck); height += Vector3.Distance(postition1, postition2); postition1 = player.GetBonePosition(HumanBodyBones.Hips); height += Vector3.Distance(postition1, postition2); isHumanoid = height > 0; if (!isHumanoid) { return(Vector3.Distance(player.GetPosition(), player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position) * 1.15f); //For non humanoids } postition2 = player.GetBonePosition(HumanBodyBones.RightLowerLeg); height += Vector3.Distance(postition1, postition2); postition1 = player.GetBonePosition(HumanBodyBones.RightFoot); height += Vector3.Distance(postition1, postition2); height *= 1.15f; // Adjusting for head return(height); }
private void Update() { if (func_active) { float DeltaTime = Time.deltaTime; TriggerTapTime += DeltaTime; AGMUnlockTimer += DeltaTime * AGMUnlocking;//AGMUnlocking is 1 if it was locked and just pressed, else 0, (waits for double tap delay to disable) float Trigger; if (UseLeftTrigger) { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger"); } else { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger"); } if (AGMUnlockTimer > 0.4f && AGMLocked == true) { AGMLocked = false; AGMUnlockTimer = 0; AGMUnlocking = 0; if (!Dial_FunconNULL) { Dial_Funcon.SetActive(false); } if (!AGMUnlockNull) { AGMUnlock.Play(); } } if (Trigger > 0.75 || (Input.GetKey(KeyCode.Space))) { if (!TriggerLastFrame) { //new button press if (TriggerTapTime < 0.4f) { //double tap detected if (AGMLocked) { //locked on, launch missile if (NumAGM > 0 && !EngineControl.Taxiing) { SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "LaunchAGM"); if (EngineControl.IsOwner) { EngineControl.SendEventToExtensions("SFEXT_O_AGMLaunch", false); } } AGMUnlocking = 0; } } else if (!AGMLocked) {//lock onto a target if (AtGCam != null) { //check for agmtargets to lcok to float targetangle = 999; RaycastHit lockpoint; RaycastHit[] agmtargs = Physics.SphereCastAll(AtGCam.transform.position, 150, AtGCam.transform.forward, Mathf.Infinity, AGMTargetsLayer); if (agmtargs.Length > 0) {//found one or more, find lowest angle one //find target with lowest angle from crosshair foreach (RaycastHit target in agmtargs) { Vector3 targetdirection = target.point - AtGCam.transform.position; float angle = Vector3.Angle(AtGCam.transform.forward, targetdirection); if (angle < targetangle) { targetangle = angle; AGMTarget = target.collider.transform.position; AGMLocked = true; AGMUnlocking = 0; RequestSerialization(); if (!Dial_FunconNULL) { Dial_Funcon.SetActive(false); } } } } else {//didn't find one, lock onto raycast point Physics.Raycast(AtGCam.transform.position, AtGCam.transform.forward, out lockpoint, Mathf.Infinity, 133121 /* Default, Environment, and Walkthrough */, QueryTriggerInteraction.Ignore); if (lockpoint.point != null) { if (!AGMUnlockNull) { AGMLock.Play(); } AGMTarget = lockpoint.point; AGMLocked = true; AGMUnlocking = 0; RequestSerialization(); if (!Dial_FunconNULL) { Dial_Funcon.SetActive(false); } } } } } else { TriggerTapTime = 0; AGMUnlockTimer = 0; AGMUnlocking = 1; } } TriggerLastFrame = true; } else { TriggerLastFrame = false; } //AGM Camera, more in hudcontroller if (!AGMLocked) { Quaternion newangle; if (InVR) { newangle = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation *Quaternion.Euler(0, 60, 0); } else if (!InEditor)//desktop mode { newangle = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation; } else//editor { newangle = VehicleTransform.rotation; } float ZoomLevel = AtGCam.fieldOfView / 90; AGMCamRotSlerper = Quaternion.Slerp(AGMCamRotSlerper, newangle, ZoomLevel * 220f * DeltaTime); if (AtGCam != null) { AGMRotDif = Vector3.Angle(AtGCam.transform.rotation * Vector3.forward, AGMCamLastFrame * Vector3.forward); // AGMRotDif = Vector3.Angle(AtGCam.transform.rotation * Vector3.forward, AGMCamRotSlerper * Vector3.forward); AtGCam.transform.rotation = AGMCamRotSlerper; Vector3 temp2 = AtGCam.transform.localRotation.eulerAngles; temp2.z = 0; AtGCam.transform.localRotation = Quaternion.Euler(temp2); } AGMCamLastFrame = newangle; } //AGMScreen float SmoothDeltaTime = Time.smoothDeltaTime; if (!AGMLocked) { AtGScreen.SetActive(true); AtGCam.gameObject.SetActive(true); //if turning camera fast, zoom out if (AGMRotDif < 2.5f) { RaycastHit camhit; Physics.Raycast(AtGCam.transform.position, AtGCam.transform.forward, out camhit, Mathf.Infinity, 1); if (camhit.point != null) { //dolly zoom //Mathf.Atan(100 <--the 100 is the height of the camera frustrum at the target distance float newzoom = Mathf.Clamp(2.0f * Mathf.Atan(100 * 0.5f / Vector3.Distance(gameObject.transform.position, camhit.point)) * Mathf.Rad2Deg, 1.5f, 90); AtGCam.fieldOfView = Mathf.Clamp(Mathf.Lerp(AtGCam.fieldOfView, newzoom, 1.5f * SmoothDeltaTime), 0.3f, 90); } } else { float newzoom = 80; AtGCam.fieldOfView = Mathf.Clamp(Mathf.Lerp(AtGCam.fieldOfView, newzoom, 3.5f * SmoothDeltaTime), 0.3f, 90); //zooming in is a bit slower than zooming out } } else { AtGScreen.SetActive(true); AtGCam.gameObject.SetActive(true); AtGCam.transform.LookAt(AGMTarget, EngineControl.VehicleMainObj.transform.up); RaycastHit camhit; Physics.Raycast(AtGCam.transform.position, AtGCam.transform.forward, out camhit, Mathf.Infinity, 1); if (camhit.point != null) { //dolly zoom //Mathf.Atan(40 <--the 40 is the height of the camera frustrum at the target distance AtGCam.fieldOfView = Mathf.Max(Mathf.Lerp(AtGCam.fieldOfView, 2.0f * Mathf.Atan(60 * 0.5f / Vector3.Distance(gameObject.transform.position, camhit.point)) * Mathf.Rad2Deg, 5 * SmoothDeltaTime), 0.3f); } } } }
public void UpdateTrackValue() { if (trackType == 1) { VRCPlayerApi player = null; switch (targetPlayer) { case 0: player = Networking.LocalPlayer; break; case 1: player = Networking.GetOwner(gameObject); break; case 2: if (targetTrigger) { var playerField = (VRCPlayerApi)targetTrigger.GetProgramVariable("triggeredPlayer"); player = playerField; } break; case 3: VRCPlayerApi[] players = new VRCPlayerApi[VRCPlayerApi.GetPlayerCount()];; VRCPlayerApi.GetPlayers(players); if (index < players.Length) { player = players[index]; } else { player = Networking.LocalPlayer; } break; } if (player == null || !player.IsValid()) { return; } switch (spot) { case "IsUserInVR": value_b = player.IsUserInVR(); break; case "IsPlayerGrounded": value_b = player.IsPlayerGrounded(); break; case "IsMaster": value_b = player.isMaster; break; case "IsInstanceOwner": value_b = player.isInstanceOwner; break; case "IsGameObjectOwner": value_b = player.IsOwner(gameObject); break; case "Position": value_v3 = player.GetPosition(); if (positionTracking) { transform.position = player.GetPosition(); transform.rotation = player.GetRotation(); } break; case "Rotation": value_v3 = player.GetRotation().eulerAngles; break; case "HeadPosition": value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position; if (positionTracking) { transform.position = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).position; transform.rotation = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation; } break; case "HeadRotation": value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head).rotation.eulerAngles; break; case "RightHandPosition": value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position; if (positionTracking) { transform.position = player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position; transform.rotation = player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation; } break; case "RightHandRotation": value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation.eulerAngles; break; case "LeftHandPosition": value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position; if (positionTracking) { transform.position = player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position; transform.rotation = player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).rotation; } break; case "LeftHandRotation": value_v3 = player.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).rotation.eulerAngles; break; case "Velocity": value_v3 = player.GetVelocity(); break; case "DisplayName": value_s = player.displayName; break; } } if (trackType == 2) { if (!targetObject) { return; } switch (spot) { case "IsActive": value_b = targetObject.activeSelf; break; case "Position": value_v3 = targetObject.transform.position; if (positionTracking) { transform.position = targetObject.transform.position; transform.rotation = targetObject.transform.rotation; } break; case "Rotation": value_v3 = targetObject.transform.rotation.eulerAngles; break; case "LocalPosition": value_v3 = targetObject.transform.localPosition; if (positionTracking) { transform.position = targetObject.transform.position; transform.rotation = targetObject.transform.rotation; } break; case "LocalRotation": value_v3 = targetObject.transform.localRotation.eulerAngles; break; case "Velocity": value_v3 = targetObject.GetComponent <Rigidbody>().velocity; break; case "AngularVelocity": value_v3 = targetObject.GetComponent <Rigidbody>().angularVelocity; break; } } if (trackType == 3) { switch (spot) { case "PlayerCount": value_i = VRCPlayerApi.GetPlayerCount(); value_f = value_i; break; case "Year": value_i = System.DateTime.Now.Year; value_f = value_i; break; case "Month": value_i = System.DateTime.Now.Month; value_f = value_i; break; case "Day": value_i = System.DateTime.Now.Day; value_f = value_i; break; case "DayOfWeek": value_i = (int)System.DateTime.Now.DayOfWeek; value_f = value_i; break; case "Hour": value_i = System.DateTime.Now.Hour; value_f = value_i; break; case "Minute": value_i = System.DateTime.Now.Minute; value_f = value_i; break; case "Second": value_i = System.DateTime.Now.Second; value_f = value_i; break; case "JoinHours": value_f = (float)(System.DateTime.Now - startTime).TotalHours; value_i = (int)value_f; break; case "JoinMinutes": value_f = (float)(System.DateTime.Now - startTime).TotalMinutes; value_i = (int)value_f; break; case "JoinSeconds": value_f = (float)(System.DateTime.Now - startTime).TotalSeconds; value_i = (int)value_f; break; } } if (trackType == 4) { if (targetComponent) { if (valueType == 0) { if (spot == "Toggle") { var toggle = (Toggle)targetComponent; value_b = toggle.isOn; } } if (valueType == 1) { if (spot == "Text") { var text = (Text)targetComponent; int.TryParse(text.text, out value_i); } if (spot == "InputField") { var inputField = (InputField)targetComponent; int.TryParse(inputField.text, out value_i); } } if (valueType == 2) { if (spot == "Slider") { var slider = (Slider)targetComponent; value_f = slider.value; } if (spot == "Scrollbar") { var scrollbar = (Scrollbar)targetComponent; value_f = scrollbar.value; } if (spot == "Text") { var text = (Text)targetComponent; float.TryParse(text.text, out value_f); } if (spot == "InputField") { var inputField = (InputField)targetComponent; float.TryParse(inputField.text, out value_f); } } if (valueType == 4) { if (spot == "Text") { var text = (Text)targetComponent; value_s = text.text; } if (spot == "InputField") { var inputField = (InputField)targetComponent; value_s = inputField.text; } } } } if (trackType == 5) { if (targetComponent != null && spot != "") { Animator animator = (Animator)targetComponent; if (valueType == 0) { value_b = animator.GetBool(spot); } if (valueType == 1) { value_i = animator.GetInteger(spot); } if (valueType == 2) { value_f = animator.GetFloat(spot); } } } if (trackType == 6) { switch (spot) { case "RightIndexTrigger": value_f = Input.GetAxis("Oculus_CrossPlatform_SecondaryIndexTrigger"); break; case "LeftIndexTrigger": value_f = Input.GetAxis("Oculus_CrossPlatform_PrimaryIndexTrigger"); break; case "RightGrip": value_f = Input.GetAxis("Oculus_CrossPlatform_SecondaryHandTrigger"); break; case "LeftGrip": value_f = Input.GetAxis("Oculus_CrossPlatform_PrimaryHandTrigger"); break; } } UpdateSubValue(); }
private void Update() { trackingData = _player.GetTrackingData(headType); transform.SetPositionAndRotation(trackingData.position, trackingData.rotation); }
void Update() { // Put cue in hand #if !HT_QUEST if (dkPrimaryControlLock) { dkPrimaryControlLock = false; return; } if (dkPrimaryControl) { if (useDesktop && bHolding) { this.transform.position = Networking.LocalPlayer.GetBonePosition(HumanBodyBones.RightHand); // Temporary target objTarget.transform.position = this.transform.position + Vector3.up; Vector3 playerpos = gameController.gameObject.transform.InverseTransformPoint(Networking.LocalPlayer.GetPosition()); // Check turn entry if ((Mathf.Abs(playerpos.x) < 2.0f) && (Mathf.Abs(playerpos.z) < 1.5f)) { VRCPlayerApi.TrackingData hmd = localplayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head); ui_pressE.SetActive(true); ui_pressE.transform.position = hmd.position + hmd.rotation * Vector3.forward; if (Input.GetKeyDown(KeyCode.E)) { dkPrimaryControl = false; gameController._ht_desktop_enter(); } } else { ui_pressE.SetActive(false); } } #endif lag_objBase = Vector3.Lerp(lag_objBase, this.transform.position, Time.deltaTime * 16.0f); if (!bOtherLock) { lag_objTarget = Vector3.Lerp(lag_objTarget, objTarget.transform.position, Time.deltaTime * 16.0f); } if (bArmed) { vSnOff = lag_objBase - vBase; vSnDet = Vector3.Dot(vSnOff, vLineNorm); objCue.transform.position = vBase + vLineNorm * vSnDet; } else { // put cue at base position objCue.transform.position = lag_objBase; objCue.transform.LookAt(lag_objTarget); } #if !HT_QUEST } #endif if (bHolding) { // Clamp controllers to play boundaries while we have hold of them Vector3 temp = this.transform.localPosition; temp.x = Mathf.Clamp(temp.x, -4.0f, 4.0f); temp.y = Mathf.Clamp(temp.y, -0.8f, 1.5f); temp.z = Mathf.Clamp(temp.z, -3.25f, 3.25f); this.transform.localPosition = temp; temp = objTarget.transform.localPosition; temp.x = Mathf.Clamp(temp.x, -4.0f, 4.0f); temp.y = Mathf.Clamp(temp.y, -0.8f, 1.5f); temp.z = Mathf.Clamp(temp.z, -3.25f, 3.25f); objTarget.transform.localPosition = temp; } }
void Update() { float DeltaTime = Time.deltaTime; if (!InEditor) { IsOwner = localPlayer.IsOwner(VehicleMainObj); } else { IsOwner = true; } if (IsOwner) { if (Health <= 0) { if (InEditor) { Explode(); } else { SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "Explode"); } } if (Manning) { //get inputs int Wf = Input.GetKey(KeyCode.W) ? 1 : 0; //inputs as ints int Sf = Input.GetKey(KeyCode.S) ? -1 : 0; int Af = Input.GetKey(KeyCode.A) ? -1 : 0; int Df = Input.GetKey(KeyCode.D) ? 1 : 0; float RGrip = 0; float RTrigger = 0; float LTrigger = 0; if (!InEditor) { RTrigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger"); LTrigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger"); RGrip = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryHandTrigger"); } Vector3 JoystickPosYaw; Vector3 JoystickPos; //virtual joystick if (InVR) { if (RGrip > 0.75) { Quaternion RotDif = Rotator.transform.rotation * Quaternion.Inverse(AAGunRotLastFrame); //difference in vehicle's rotation since last frame JoystickZeroPoint = RotDif * JoystickZeroPoint; //zero point rotates with the plane so it appears still to the pilot if (!RGripLastFrame) //first frame you gripped joystick { RotDif = Quaternion.identity; JoystickZeroPoint = localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation;//rotation of the controller relative to the plane when it was pressed } //difference between the plane and the hand's rotation, and then the difference between that and the JoystickZeroPoint Quaternion JoystickDifference = (Quaternion.Inverse(Rotator.transform.rotation) * localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).rotation) * Quaternion.Inverse(JoystickZeroPoint); JoystickPosYaw = (JoystickDifference * Rotator.transform.forward);//angles to vector JoystickPosYaw.y = 0; JoystickPos = (JoystickDifference * Rotator.transform.up); JoystickPos.y = 0; VRPitchYawInput = new Vector2(JoystickPos.z, JoystickPosYaw.x) * 1.41421f; RGripLastFrame = true; } else { JoystickPosYaw.x = 0; VRPitchYawInput = Vector3.zero; RGripLastFrame = false; } AAGunRotLastFrame = Rotator.transform.rotation; } int InX = (Wf + Sf); int InY = (Af + Df); if (InX > 0 && InputXKeyb < 0 || InX < 0 && InputXKeyb > 0) { InputXKeyb = 0; } if (InY > 0 && InputYKeyb < 0 || InY < 0 && InputYKeyb > 0) { InputYKeyb = 0; } InputXKeyb = Mathf.Lerp((InputXKeyb), InX, Mathf.Abs(InX) > 0 ? TurningResponseDesktop * DeltaTime : 1); InputYKeyb = Mathf.Lerp((InputYKeyb), InY, Mathf.Abs(InY) > 0 ? TurningResponseDesktop * DeltaTime : 1); float InputX = Mathf.Clamp((VRPitchYawInput.x + InputXKeyb), -1, 1); float InputY = Mathf.Clamp((VRPitchYawInput.y + InputYKeyb), -1, 1); //joystick model movement if (!JoyStickNull) { JoyStick.localRotation = Quaternion.Euler(new Vector3(InputX * 25f, InputY * 25f, 0)); } InputX *= TurnSpeedMulti; InputY *= TurnSpeedMulti; RotationSpeedX += -(RotationSpeedX * TurnFriction * DeltaTime) + InputX * DeltaTime; RotationSpeedY += -(RotationSpeedY * TurnFriction * DeltaTime) + InputY * DeltaTime; //rotate turret float temprot = Rotator.transform.localRotation.eulerAngles.x; temprot += RotationSpeedX; if (temprot > 180) { temprot -= 360; } if (temprot > DownAngleMax || temprot < -UpAngleMax) { RotationSpeedX = 0; } temprot = Mathf.Clamp(temprot, -UpAngleMax, DownAngleMax);//limit angles Rotator.transform.localRotation = Quaternion.Euler(new Vector3(temprot, Rotator.transform.localRotation.eulerAngles.y + (RotationSpeedY), 0)); //Firing the gun if ((RTrigger >= 0.75 || Input.GetKey(KeyCode.Space)) && MGAmmoSeconds > 0) { firing = true; MGAmmoSeconds -= DeltaTime; MGAmmoRecharge = MGAmmoSeconds - MGReloadDelay; } else//recharge the ammo { firing = false; MGAmmoRecharge = Mathf.Min(MGAmmoRecharge + (DeltaTime * MGReloadSpeed), MGAmmoFull); MGAmmoSeconds = Mathf.Max(MGAmmoRecharge, MGAmmoSeconds); } if (DoAAMTargeting) { if (AAMLockTimer > AAMLockTime && AAMHasTarget) { AAMLocked = true; } else { AAMLocked = false; } //firing AAM if (LTrigger > 0.75 || (Input.GetKey(KeyCode.C))) { if (!LTriggerLastFrame) { if (AAMLocked && Time.time - AAMLastFiredTime > AAMLaunchDelay) { AAMLastFiredTime = Time.time; if (InEditor) { LaunchAAM(); } else { SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "LaunchAAM"); } if (NumAAM == 0) { AAMLockTimer = 0; AAMLocked = false; } } } LTriggerLastFrame = true; } else { LTriggerLastFrame = false; } } //reloading AAMs if (NumAAM == FullAAMs) { AAMReloadTimer = 0; } else { AAMReloadTimer += DeltaTime; } if (AAMReloadTimer > MissileReloadTime) { if (InEditor) { ReloadAAM(); } else { SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "ReloadAAM"); } } //HP Repair if (Health == FullHealth) { HPRepairTimer = 0; } else { HPRepairTimer += DeltaTime; } if (HPRepairTimer > HPRepairDelay) { if (InEditor) { HPRepair(); } else { SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "HPRepair"); } } } } if (firing) { AAGunAnimator.SetBool("firing", true); } else { AAGunAnimator.SetBool("firing", false); } //Sounds if (AAMLockTimer > 0 && !AAMLocked && NumAAM > 0) { AAMLocking.gameObject.SetActive(true); AAMLockedOn.gameObject.SetActive(false); } else if (AAMLocked) { AAMLocking.gameObject.SetActive(false); AAMLockedOn.gameObject.SetActive(true); } else { AAMLocking.gameObject.SetActive(false); AAMLockedOn.gameObject.SetActive(false); } }
private void Update() { float Trigger; if (UseLeftTrigger) { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger"); } else { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger"); } if (Trigger > 0.75) { if (!LTriggerLastFrame && EngineControl.Speed < 20) { if (EngineControl.CanopyCloseTimer <= -100000 - EngineControl.CanopyCloseTime) { if (!Dial_FunconNULL) { Dial_Funcon.SetActive(false); } } else if (EngineControl.CanopyCloseTimer < 0 && EngineControl.CanopyCloseTimer > -100000) { if (!Dial_FunconNULL) { Dial_Funcon.SetActive(true); } } EngineControl.ToggleCanopy(); } //ejection if (EngineControl.InVR) { Vector3 handposL = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position; handposL = VehicleTransform.InverseTransformDirection(handposL); Vector3 handposR = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position; handposR = VehicleTransform.InverseTransformDirection(handposR); if (!LTriggerLastFrame && (handposL.y - handposR.y) < 0.20f) { EjectZeroPoint = handposL.y; EjectTimer = 0; } if (EjectZeroPoint - handposL.y > .5f && EjectTimer < 1) { Ejected = true; HUDControl.ExitStation(); SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "CanopyOpening"); } } EjectTimer += Time.deltaTime; LTriggerLastFrame = true; } else { LTriggerLastFrame = false; EjectTimer = 2; } }
private void LateUpdate() { Vector3 targetPos; Quaternion targetRot; // we're tracking bones in regular Update, otherwise it doesnt sync with IK if (trackBone) { return; } if (trackPlayerBase) { targetPos = player.GetPosition(); targetRot = player.GetRotation(); } else if (trackPlayspace) { var vertical = Input.GetAxisRaw("Vertical"); var horizontal = Input.GetAxisRaw("Horizontal"); var rotation = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryThumbstickHorizontal"); targetPos = player.GetPosition(); targetRot = player.GetRotation(); offsetRot = oldRot - targetRot.eulerAngles.y; oldRot = targetRot.eulerAngles.y; if (vertical > 0 || vertical < 0 || horizontal > 0 || horizontal < 0) { targetPos += offsetPos; targetTransform.position = targetPos; if (rotation > 0 || rotation < 0) { targetTransform.RotateAround(player.GetPosition(), Vector3.up, -offsetRot); } return; } if (rotation > 0 || rotation < 0) { targetTransform.RotateAround(player.GetPosition(), Vector3.up, -offsetRot); } offsetPos = targetTransform.position - targetPos; return; } else { trackingData = player.GetTrackingData(trackingTarget); targetPos = trackingData.position; targetRot = trackingData.rotation; } if (trackPosition && trackRotation) { targetTransform.SetPositionAndRotation(targetPos, targetRot); } else if (trackPosition) { targetTransform.position = targetPos; } else { targetTransform.rotation = targetRot; } if (correctForControllers && !trackPlayspace && !trackPlayerBase) { // Thx to Phasedragon for testing and finding out the exact formula targetTransform.rotation = targetRot * Quaternion.Euler(-41, 0, 0); } if (rotateBy.magnitude > 0) { targetTransform.Rotate(rotateBy); } }
public void gettracking(Transform visobj, VRCPlayerApi.TrackingDataType trackpoint, VRCPlayerApi PlayerApiref) { visobj.position = PlayerApiref.GetTrackingData(trackpoint).position; visobj.rotation = PlayerApiref.GetTrackingData(trackpoint).rotation; }
private void LateUpdate() { if (InPlane) { if (Pilot) { float DeltaTime = Time.deltaTime; float Trigger; if (UseLeftTrigger) { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger"); } else { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger"); } if (Trigger > 0.75) { //you can change smoke colour by holding down the trigger and waving your hand around. x/y/z = r/g/b Vector3 HandPosSmoke = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.RightHand).position; HandPosSmoke = VehicleTransform.InverseTransformDirection(HandPosSmoke); Vector3 smokcol = SmokeColor; Vector3 TempSmokeCol = Vector3.zero; if (!TriggerLastFrame) { SmokeZeroPoint = HandPosSmoke; TempSmokeCol = smokcol; ToggleSmoking(); SmokeHoldTime = 0; } SmokeHoldTime += Time.deltaTime; if (SmokeHoldTime > .4f) { //VR Set Smoke Vector3 SmokeDifference = (SmokeZeroPoint - HandPosSmoke) * -EngineControl.ThrottleSensitivity; smokcol.x = Mathf.Clamp(TempSmokeCol.x + SmokeDifference.x, 0, 1); smokcol.y = Mathf.Clamp(TempSmokeCol.y + SmokeDifference.y, 0, 1); smokcol.z = Mathf.Clamp(TempSmokeCol.z + SmokeDifference.z, 0, 1); } TriggerLastFrame = true; } else { TriggerLastFrame = false; } if (Smoking) { int keypad7 = Input.GetKey(KeyCode.Keypad7) ? 1 : 0; int Keypad4 = Input.GetKey(KeyCode.Keypad4) ? 1 : 0; int Keypad8 = Input.GetKey(KeyCode.Keypad8) ? 1 : 0; int Keypad5 = Input.GetKey(KeyCode.Keypad5) ? 1 : 0; int Keypad9 = Input.GetKey(KeyCode.Keypad9) ? 1 : 0; int Keypad6 = Input.GetKey(KeyCode.Keypad6) ? 1 : 0; SmokeColor.x = Mathf.Clamp(SmokeColor.x + ((keypad7 - Keypad4) * DeltaTime), 0, 1); SmokeColor.y = Mathf.Clamp(SmokeColor.y + ((Keypad8 - Keypad5) * DeltaTime), 0, 1); SmokeColor.z = Mathf.Clamp(SmokeColor.z + ((Keypad9 - Keypad6) * DeltaTime), 0, 1); } } //Smoke Color Indicator SmokeColorIndicator.color = SmokeColor_Color; } //everyone does this while smoke is active if (Smoking && !DisplaySmokeNull) { Color SmokeCol = SmokeColor_Color; foreach (ParticleSystem smoke in DisplaySmoke) { var main = smoke.main; main.startColor = new ParticleSystem.MinMaxGradient(SmokeCol, SmokeCol * .8f); } } SmokeColor_Color = new Color(SmokeColor.x, SmokeColor.y, SmokeColor.z); }
private void Update() { VRCPlayerApi.TrackingData data = player.GetTrackingData(VRCPlayerApi.TrackingDataType.Head); gameObject.transform.SetPositionAndRotation(data.position, data.rotation); }
private void LateUpdate() { float Trigger; if (UseLeftTrigger) { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_PrimaryIndexTrigger"); } else { Trigger = Input.GetAxisRaw("Oculus_CrossPlatform_SecondaryIndexTrigger"); } if (Trigger > 0.75) { float CruiseTemp = 0; //for setting speed in VR Vector3 handpos = VehicleTransform.position - localPlayer.GetTrackingData(VRCPlayerApi.TrackingDataType.LeftHand).position; handpos = VehicleTransform.InverseTransformDirection(handpos); //enable and disable if (!TriggerLastFrame) { if (!EngineControl.Cruise) { EngineControl.SetSpeed = EngineControl.AirSpeed; EngineControl.Cruise = true; if (!Dial_FunconNULL) { Dial_Funcon.SetActive(EngineControl.Cruise); } } if (TriggerTapTime > .4f)//no double tap { TriggerTapTime = 0; } else//double tap detected, turn off cruise { EngineControl.PlayerThrottle = EngineControl.ThrottleInput; EngineControl.Cruise = false; if (!Dial_FunconNULL) { Dial_Funcon.SetActive(EngineControl.Cruise); } } //end of enable disable //more set speed stuff SpeedZeroPoint = handpos.z; CruiseTemp = EngineControl.SetSpeed; } float SpeedDifference = (SpeedZeroPoint - handpos.z) * 250; EngineControl.SetSpeed = Mathf.Floor(Mathf.Clamp(CruiseTemp + SpeedDifference, 0, 2000)); TriggerLastFrame = true; } else { TriggerLastFrame = false; } TriggerTapTime += Time.deltaTime; }
void Update() { // Put cue in hand #if !HT_QUEST if (dkPrimaryControl) { if (useDesktop && bHolding) { this.transform.position = Networking.LocalPlayer.GetBonePosition(HumanBodyBones.RightHand); // Temporary target objTarget.transform.position = this.transform.position + Vector3.up; Vector3 playerpos = gameController.gameObject.transform.InverseTransformPoint(Networking.LocalPlayer.GetPosition()); // Check turn entry if ((Mathf.Abs(playerpos.x) < 2.0f) && (Mathf.Abs(playerpos.z) < 1.5f)) { VRCPlayerApi.TrackingData hmd = localplayer.GetTrackingData(VRCPlayerApi.TrackingDataType.Head); ui_pressE.SetActive(true); ui_pressE.transform.position = hmd.position + hmd.rotation * Vector3.forward; if (Input.GetKeyDown(KeyCode.E)) { dkPrimaryControl = false; gameController._ht_desktop_enter(); } } else { ui_pressE.SetActive(false); } } #endif lag_objBase = Vector3.Lerp(lag_objBase, this.transform.position, Time.deltaTime * 16.0f); if (!bOtherLock) { lag_objTarget = Vector3.Lerp(lag_objTarget, objTarget.transform.position, Time.deltaTime * 16.0f); } if (bArmed) { vSnOff = lag_objBase - vBase; vSnDet = Vector3.Dot(vSnOff, vLineNorm); objCue.transform.position = vBase + vLineNorm * vSnDet; } else { // put cue at base position objCue.transform.position = lag_objBase; objCue.transform.LookAt(lag_objTarget); } #if !HT_QUEST } #endif //Xiexe: I find this to be a little silly, hard coding bounds is a little nuts. I think it should either be exposed to the inspector // or should be set using a trigger volume and using it's bounds via the editor. We're in a modern game engine, no need to do this. We have the technology. if (bHolding) { // Clamp controllers to play boundaries while we have hold of them Vector3 temp = this.transform.localPosition; temp.x = Mathf.Clamp(temp.x, -4.0f, 4.0f); temp.y = Mathf.Clamp(temp.y, -0.8f, 1.5f); temp.z = Mathf.Clamp(temp.z, -3.25f, 3.25f); this.transform.localPosition = temp; temp = objTarget.transform.localPosition; temp.x = Mathf.Clamp(temp.x, -4.0f, 4.0f); temp.y = Mathf.Clamp(temp.y, -0.8f, 1.5f); temp.z = Mathf.Clamp(temp.z, -3.25f, 3.25f); objTarget.transform.localPosition = temp; } }