public void StartRecordingAvatars(Dictionary <RefID, Slot> avatar_roots, string override_filename = null) { foreach (var item in avatar_roots) { RefID user_id = item.Key; Slot rootSlot = item.Value; VRIK comp = rootSlot.GetComponentInChildren <VRIK>(); if (comp != null) { IKSolverVR solver = (IKSolverVR)comp.Solver; boness[user_id] = solver.BoneReferences; string filename = ""; if (override_filename != null) { filename = saving_folder + "/" + override_filename + "_mocap.bvh"; } else { filename = saving_folder + "/" + user_id.ToString() + "_mocap.bvh"; } fileWriters[user_id] = new System.IO.StreamWriter(filename); filenames[user_id] = filename; BvhHeaderWrite(fileWriters[user_id], boness[user_id]); } } isRecording = true; }
public void ApplyAll(IKSolverVR solver, TrackingStyle style) { solver.spine.headTarget = style.UseHMD ? HMD : HeadTracker; solver.leftArm.target = LeftHandTracker; solver.rightArm.target = RightHandTracker; solver.spine.pelvisTarget = style.TrackPelvis ? PelvisTracker : null; solver.leftLeg.target = style.TrackFeet ? LeftFootTracker : null; solver.rightLeg.target = style.TrackFeet ? RightFootTracker : null; }
public void Assign(IKSolverVR solver) { if (!HasTargetObject()) { var obj = new GameObject("Target"); obj.transform.position = Vector3.zero; obj.transform.rotation = Quaternion.identity; obj.transform.parent = transform; } Assign(solver, TargetObject?.transform ?? transform, 1f); }
public VRIKSolverData(IKSolverVR solver) { IKPositionWeight = solver.IKPositionWeight; LOD = solver.LOD; plantFeet = solver.plantFeet; Spine = new VRIKSolverDataSpine(solver.spine); LeftArm = new VRIKSolverDataArm(solver.leftArm); RightArm = new VRIKSolverDataArm(solver.rightArm); LeftLeg = new VRIKSolverDataLeg(solver.leftLeg); RightLeg = new VRIKSolverDataLeg(solver.rightLeg); Locomotion = new VRIKSolverDataLocomotion(solver.locomotion); }
public void ApplyTo(IKSolverVR solver) { solver.IKPositionWeight = IKPositionWeight; solver.LOD = LOD; solver.plantFeet = plantFeet; Spine.ApplyTo(solver.spine); LeftArm.ApplyTo(solver.leftArm); RightArm.ApplyTo(solver.rightArm); LeftLeg.ApplyTo(solver.leftLeg); RightLeg.ApplyTo(solver.rightLeg); Locomotion.ApplyTo(solver.locomotion); }
public CachedSolver(IKSolverVR solver) { Solver = solver; Spine = solver.spine; LeftArm = solver.leftArm; LeftLeg = solver.leftLeg; RightArm = solver.rightArm; RightLeg = solver.rightLeg; Locomotion = solver.locomotion; LeftLegBones = LeftLeg.bones; RightLegBones = RightLeg.bones; }
public override void OnLateUpdate() { if (isReady) { l_solver = VRCPlayer.field_Internal_Static_VRCPlayer_0?.field_Private_VRC_AnimationController_0?.field_Private_VRIK_0?.solver; if (l_solver != null) { if (l_solver.leftArm?.target != null) { l_solver.leftArm.positionWeight = 1f; l_solver.leftArm.rotationWeight = 1f; l_solver.leftArm.target.position = m_leftTargetPosition; l_solver.leftArm.target.rotation = m_leftTargetRotation; } if (l_solver.rightArm?.target != null) { l_solver.rightArm.positionWeight = 1f; l_solver.rightArm.rotationWeight = 1f; l_solver.rightArm.target.position = m_rightTargetPosition; l_solver.rightArm.target.rotation = m_rightTargetRotation; } } l_handController = VRCPlayer.field_Internal_Static_VRCPlayer_0?.field_Private_VRC_AnimationController_0?.field_Private_HandGestureController_0; if (l_handController != null) { l_handController.field_Internal_Boolean_0 = true; l_handController.field_Private_EnumNPublicSealedvaKeMoCoGaViOcViDaWaUnique_0 = VRCInputManager.EnumNPublicSealedvaKeMoCoGaViOcViDaWaUnique.Index; for (int i = 0; i < 2; i++) { for (int j = 0; j < 5; j++) { int l_dataIndex = i * 5 + j; l_handController.field_Private_ArrayOf_Single_1[l_dataIndex] = 1.0f - m_fingersBends[l_dataIndex]; // Squeeze l_handController.field_Private_ArrayOf_Single_3[l_dataIndex] = m_fingersSpreads[l_dataIndex]; // Spread } } } } }
public void AjdustSolverScale(IKSolverVR solver, IKSolverVR solverParameter) { // 参考: https://qiita.com/chiepomme/items/aef42df2d46aa0f79fbe solver.spine.minHeadHeight = solverParameter.spine.minHeadHeight * AvatarScale; solver.locomotion.footDistance = solverParameter.locomotion.footDistance * AvatarScale; solver.locomotion.stepThreshold = solverParameter.locomotion.stepThreshold * AvatarScale; solver.locomotion.maxVelocity = solverParameter.locomotion.maxVelocity * AvatarScale; for (var i = 0; i < solver.locomotion.stepHeight.keys.Length; i++) { var newKey = solverParameter.locomotion.stepHeight.keys[i]; newKey.value *= AvatarScale; solver.locomotion.stepHeight.MoveKey(i, newKey); } for (var i = 0; i < solver.locomotion.heelHeight.keys.Length; i++) { var newKey = solverParameter.locomotion.heelHeight.keys[i]; newKey.value *= AvatarScale; solver.locomotion.heelHeight.MoveKey(i, newKey); } }
public Spine(IKSolverVR solver) { mySolver = solver; }
// ReSharper disable once ParameterHidesMember private void Assign(IKSolverVR solver, Transform transform, float weight) { switch (InputSource) { case SteamVR_Input_Sources.LeftHand: solver.leftArm.target = transform; solver.leftArm.positionWeight = weight; solver.leftArm.rotationWeight = weight; break; case SteamVR_Input_Sources.RightHand: solver.rightArm.target = transform; solver.rightArm.positionWeight = weight; solver.rightArm.rotationWeight = weight; break; case SteamVR_Input_Sources.LeftFoot: solver.leftLeg.target = transform; solver.leftLeg.positionWeight = weight; solver.leftLeg.rotationWeight = weight; break; case SteamVR_Input_Sources.RightFoot: solver.rightLeg.target = transform; solver.rightLeg.positionWeight = weight; solver.rightLeg.rotationWeight = weight; break; case SteamVR_Input_Sources.Waist: solver.spine.pelvisTarget = transform; solver.spine.pelvisPositionWeight = weight; solver.spine.pelvisRotationWeight = weight; solver.plantFeet = false; break; case SteamVR_Input_Sources.Head: solver.spine.headTarget = transform; solver.spine.positionWeight = weight; solver.spine.rotationWeight = weight; solver.spine.maxRootAngle = 180f; break; case SteamVR_Input_Sources.LeftKnee: solver.leftLeg.bendGoal = transform; solver.leftLeg.bendGoalWeight = weight; break; case SteamVR_Input_Sources.RightKnee: solver.rightLeg.bendGoal = transform; solver.rightArm.bendGoalWeight = weight; break; case SteamVR_Input_Sources.LeftElbow: solver.leftArm.bendGoal = transform; solver.leftArm.bendGoalWeight = weight; break; case SteamVR_Input_Sources.RightElbow: solver.rightArm.bendGoal = transform; solver.rightArm.bendGoalWeight = weight; break; case SteamVR_Input_Sources.LeftShoulder: case SteamVR_Input_Sources.RightShoulder: case SteamVR_Input_Sources.Chest: case SteamVR_Input_Sources.Any: case SteamVR_Input_Sources.Gamepad: case SteamVR_Input_Sources.Camera: case SteamVR_Input_Sources.Keyboard: case SteamVR_Input_Sources.Treadmill: throw new NotSupportedException(); // default: // throw new ArgumentOutOfRangeException(); } }
public void UnAssign(IKSolverVR solver) { Assign(solver, null, 0f); }
// Start is called before the first frame update void Start() { animator = GetComponent <Animator>(); solverVR = (IKSolverVR)vrik.GetIKSolver(); }