private void Inject(IAvatarInput input, SpawnedAvatar avatar, ILoggerProvider loggerProvider, IKHelper ikHelper) { _input = input; _avatar = avatar; _logger = loggerProvider.CreateLogger <AvatarIK>(_avatar.avatar.descriptor.name); _ikHelper = ikHelper; }
internal void Construct(string fullPath, ILogger <AvatarPrefab> logger, IKHelper ikHelper, DiContainer container) { this.fullPath = fullPath ?? throw new ArgumentNullException(nameof(fullPath)); descriptor = GetComponent <AvatarDescriptor>() ?? throw new AvatarLoadException($"Avatar at '{fullPath}' does not have an AvatarDescriptor"); fileName = Path.GetFileName(fullPath); _logger = logger; _logger.name = descriptor.name; #pragma warning disable CS0618 VRIKManager vrikManager = GetComponentInChildren <VRIKManager>(); IKManager ikManager = GetComponentInChildren <IKManager>(); #pragma warning restore CS0618 // migrate IKManager/IKManagerAdvanced to VRIKManager if (ikManager) { if (!vrikManager) { vrikManager = container.InstantiateComponent <VRIKManager>(gameObject); } _logger.Warning("IKManager and IKManagerAdvanced are deprecated; please migrate to VRIKManager"); ApplyIKManagerFields(vrikManager, ikManager); Destroy(ikManager); } if (vrikManager) { if (!vrikManager.areReferencesFilled) { _logger.Warning($"References are not filled on '{vrikManager.name}'; detecting references automatically"); vrikManager.AutoDetectReferences(); } } // remove any existing VRIK instances foreach (VRIK existingVrik in GetComponentsInChildren <VRIK>()) { _logger.Warning($"Found VRIK on '{existingVrik.name}'; manually adding VRIK to an avatar is no longer needed, please remove it"); if (existingVrik && vrikManager && existingVrik.references.isFilled && !vrikManager.areReferencesFilled) { _logger.Warning($"Copying references from VRIK on '{existingVrik.name}'; this is deprecated behaviour and will be removed in a future release"); CopyReferencesFromExistingVrik(vrikManager, existingVrik.references); } Destroy(existingVrik); } if (vrikManager) { ikHelper.CreateOffsetTargetsIfMissing(vrikManager, transform); } head = transform.Find("Head"); leftHand = transform.Find("LeftHand"); rightHand = transform.Find("RightHand"); pelvis = transform.Find("Pelvis"); leftLeg = transform.Find("LeftLeg"); rightLeg = transform.Find("RightLeg"); if (vrikManager) { if (vrikManager.references_root != vrikManager.transform) { _logger.Warning("VRIKManager is not on the root reference transform; this may cause unexpected issues"); } CheckTargetWeight("Left Arm", leftHand, vrikManager.solver_leftArm_positionWeight, vrikManager.solver_leftArm_rotationWeight); CheckTargetWeight("Right Arm", rightHand, vrikManager.solver_rightArm_positionWeight, vrikManager.solver_rightArm_rotationWeight); CheckTargetWeight("Pelvis", pelvis, vrikManager.solver_spine_pelvisPositionWeight, vrikManager.solver_spine_pelvisRotationWeight); CheckTargetWeight("Left Leg", leftLeg, vrikManager.solver_leftLeg_positionWeight, vrikManager.solver_leftLeg_rotationWeight); CheckTargetWeight("Right Leg", rightLeg, vrikManager.solver_rightLeg_positionWeight, vrikManager.solver_rightLeg_rotationWeight); FixTrackingReferences(vrikManager); } if (transform.localPosition.sqrMagnitude > 0) { _logger.Warning("Avatar root position is not at origin; this may cause unexpected issues"); } var poseManager = GetComponentInChildren <PoseManager>(); isIKAvatar = vrikManager; supportsFingerTracking = poseManager && poseManager.isValid; eyeHeight = GetEyeHeight(); armSpan = GetArmSpan(vrikManager); #pragma warning disable CS0612, CS0618 loadedAvatar = new LoadedAvatar(this); #pragma warning restore CS0612, CS0618 }
public void Start() { IKHelper ikHelper = new IKHelper(new EditorLoggerProvider()); ikHelper.InitializeVRIK(transform.GetComponentInChildren <VRIKManager>(), transform); }
public void Start() { IKHelper ikHelper = new IKHelper(new UnityDebugLogger <IKHelper>()); ikHelper.InitializeVRIK(transform.GetComponentInChildren <VRIKManager>(), transform); }