protected override void OnPlayBack(PlayerEntity player) { try { _info.BeginProfileOnlyEnableProfile(); CheckPlayerLifeState(player); var networkAnimator = player.networkAnimator; if (null == networkAnimator) { return; } if (!player.gamePlay.IsLifeState(EPlayerLifeState.Dead)) { OverridePlayBackNetworkAnimator(player, networkAnimator.AnimatorLayers); PoseReplayer.ReplayPose(networkAnimator.AnimatorLayers, networkAnimator.AnimatorParameters, player.thirdPersonAnimator.UnityAnimator); } } finally { _info.EndProfileOnlyEnableProfile(); } }
/// <summary> /// 这个函数没有应用PeekDegree等boneRigging.Update /// </summary> /// <param name="player"></param> public static void UpdateAnimatorTransform(PlayerEntity player) { if (!player.hasNetworkAnimator && !player.hasThirdPersonAnimator) { return; } var networkAnimator = player.networkAnimator; var animatorP3 = player.thirdPersonAnimator.UnityAnimator; var previousMode = animatorP3.cullingMode; animatorP3.cullingMode = AnimatorCullingMode.AlwaysAnimate; // Animation Animator.ClearAnimatorJobContainer(); // 流量优化用 // if (networkAnimator.AnimatorParameters == null) // { // networkAnimator.SetAnimatorParamsWithoutChangeData( // NetworkAnimatorUtil.GetAnimatorParams(player.thirdPersonAnimator.UnityAnimator)); // networkAnimator.ConvertCompressDataToStructureData(); // } AnimatorPoseReplayer.ReplayPose(networkAnimator.AnimatorLayers, networkAnimator.AnimatorParameters, animatorP3); Animator.BatchUpdate(); animatorP3.cullingMode = previousMode; }
protected override void OnPlayBack(PlayerEntity player) { try { _info.BeginProfileOnlyEnableProfile(); CheckPlayerLifeState(player); var networkAnimator = player.networkAnimator; if (null == networkAnimator) { return; } if (!player.gamePlay.IsLifeState(EPlayerLifeState.Dead)) { OverridePlayBackNetworkAnimator(player, networkAnimator.AnimatorLayers); // 流量优化用 // if (networkAnimator.AnimatorParameters == null) // { // networkAnimator.SetAnimatorParamsWithoutChangeData( // NetworkAnimatorUtil.GetAnimatorParams(player.thirdPersonAnimator.UnityAnimator)); // networkAnimator.ConvertCompressDataToStructureData(); // } AnimatorPoseReplayer.ReplayPose(networkAnimator.AnimatorLayers, networkAnimator.AnimatorParameters, player.thirdPersonAnimator.UnityAnimator); } } finally { _info.EndProfileOnlyEnableProfile(); } }
private void RewindNetworkAnimator(IUserCmd cmd, PlayerEntity playerEntity) { // 预测回滚 if (playerEntity.fpAnimStatus.NeedRewind) { _logger.WarnFormat("rewind fpAnimStatus:{0}!!!", playerEntity.entityKey.Value); _poseReplayer.ReplayPose(playerEntity.fpAnimStatus.AnimatorLayers, playerEntity.fpAnimStatus.AnimatorParameters, playerEntity.firstPersonAnimator.UnityAnimator); // if rewind for history not saved, should not update if (playerEntity.fpAnimStatus.BaseClientTime != 0) { playerEntity.firstPersonAnimator.UnityAnimator.Update( (cmd.ClientTime - playerEntity.networkAnimator.BaseClientTime - cmd.FrameInterval) * 0.001f); } } if (playerEntity.networkAnimator.NeedRewind) { _logger.WarnFormat("rewind networkAnimator:{0}!!!", playerEntity.entityKey.Value); _poseReplayer.ReplayPose(playerEntity.networkAnimator.AnimatorLayers, playerEntity.networkAnimator.AnimatorParameters, playerEntity.thirdPersonAnimator.UnityAnimator); // if rewind for history not saved, should not update if (playerEntity.networkAnimator.BaseClientTime != 0) { playerEntity.thirdPersonAnimator.UnityAnimator.Update( (cmd.ClientTime - playerEntity.networkAnimator.BaseClientTime - cmd.FrameInterval) * 0.001f); //_logger.InfoFormat("rewind for history not saved, should not update, seq:{0}, SnapshotId:{1}", cmd.Seq, cmd.SnapshotId); } } }
public static void UpdateTransform(PlayerEntity player, NetworkAnimatorComponent networkAnimator, PredictedAppearanceComponent appearance, Orientation orientation) { if (!player.hasAppearanceInterface) { return; } //Logger.InfoFormat("replay pose, networkAnimatior:BaseClientTime{0}, server Time:{1}", networkAnimator.BaseClientTime, networkAnimator.BaseServerTime); // Animation PoseReplayer.ReplayPose(networkAnimator.AnimatorLayers, networkAnimator.AnimatorParameters, player.thirdPersonAnimator.UnityAnimator); // equipment(pan) player.appearanceInterface.Appearance.SyncFrom(player.latestAppearance); player.appearanceInterface.Appearance.SyncFrom(appearance); player.appearanceInterface.Appearance.TryRewind(); player.characterBoneInterface.CharacterBone.Peek(player.thirdPersonAppearance.PeekDegree); CodeRigBoneParam param = new CodeRigBoneParam { PitchAmplitude = orientation.Pitch, OverlayAnimationWeight = networkAnimator.AnimatorLayers[NetworkAnimatorLayer.PlayerUpperBodyOverlayLayer].Weight, PostureWhenOverlay = player.thirdPersonAppearance.Posture, // 预测时,IK不生效 IKActive = ActiveIK(player.thirdPersonAppearance.Action, player.thirdPersonAppearance.Posture), HeadPitch = player.characterBone.PitchHeadAngle, HeadYaw = player.characterBone.RotHeadAngle, HandPitch = player.characterBone.PitchHandAngle, HeadRotProcess = player.characterBone.HeadRotProcess, IsHeadRotCW = player.characterBone.IsHeadRotCW }; // code controlled pose player.characterBoneInterface.CharacterBone.Update(param); // 更新包围盒 if (player.thirdPersonAppearance.NeedUpdateController) { player.characterControllerInterface.CharacterController.SetCharacterControllerHeight(player.thirdPersonAppearance.CharacterHeight); player.characterControllerInterface.CharacterController.SetCharacterControllerCenter(player.thirdPersonAppearance.CharacterCenter); player.characterControllerInterface.CharacterController.SetCharacterControllerRadius(player.thirdPersonAppearance.CharacterRadius); } player.characterContoller.Value.SetCurrentControllerType(ThirdPersonPostureTool.ConvertToPostureInConfig(player.thirdPersonAppearance.Posture)); }
public static void UpdateTransform(PlayerEntity player, NetworkAnimatorComponent networkAnimator, PredictedAppearanceComponent appearance, OrientationComponent orientation) { if (!player.hasAppearanceInterface) { return; } //Logger.InfoFormat("replay pose, networkAnimatior:BaseClientTime{0}, server Time:{1}", networkAnimator.BaseClientTime, networkAnimator.BaseServerTime); // Animation Animator.ClearAnimatorJobContainer(); PoseReplayer.ReplayPose(networkAnimator.AnimatorLayers, networkAnimator.AnimatorParameters, player.thirdPersonAnimator.UnityAnimator); Animator.BatchUpdate(); Animator.ClearAnimatorJobContainer(); // equipment(pan) var appearanceInterface = player.appearanceInterface; appearanceInterface.Appearance.SyncLatestFrom(player.latestAppearance); appearanceInterface.Appearance.SyncPredictedFrom(appearance); appearanceInterface.Appearance.TryRewind(); var characterBoneInterface = player.characterBoneInterface; var thirdPersonAppearance = player.thirdPersonAppearance; var characterBone = player.characterBone; var characterControllerInterface = player.characterControllerInterface; characterBoneInterface.CharacterBone.Peek(thirdPersonAppearance.PeekDegree); var param = new CodeRigBoneParam { PitchAmplitude = orientation.Pitch, OverlayAnimationWeight = networkAnimator.AnimatorLayers[NetworkAnimatorLayer.PlayerUpperBodyOverlayLayer].Weight, PostureWhenOverlay = thirdPersonAppearance.Posture, // 预测时,IK不生效 IKActive = ActiveIK(thirdPersonAppearance.Action, thirdPersonAppearance.Posture, thirdPersonAppearance.NextPosture, thirdPersonAppearance.Movement), HeadPitch = characterBone.PitchHeadAngle, HeadYaw = characterBone.RotHeadAngle, HandPitch = characterBone.PitchHandAngle, HeadRotProcess = characterBone.HeadRotProcess, WeaponRot = characterBone.WeaponRot, IsProne = thirdPersonAppearance.Posture == ThirdPersonPosture.Prone, IsHeadRotCW = characterBone.IsHeadRotCW, FirstPersonPositionOffset = characterBone.FirstPersonPositionOffset, FirstPersonRotationOffset = characterBone.FirstPersonRotationOffset, FirstPersonSightOffset = characterBone.FirstPersonSightOffset }; // code controlled pose characterBoneInterface.CharacterBone.WeaponRotPlayback(param); characterBoneInterface.CharacterBone.Update(param); player.characterContoller.Value.SetCurrentControllerType( ThirdPersonPostureTool.ConvertToPostureInConfig(thirdPersonAppearance.Posture)); // 更新包围盒 if (thirdPersonAppearance.NeedUpdateController) { characterControllerInterface.CharacterController.SetCharacterControllerHeight(thirdPersonAppearance .CharacterHeight, player.characterContoller.Value.GetCurrentControllerType() == CharacterControllerType.UnityCharacterController, thirdPersonAppearance.CharacterStandHeight); characterControllerInterface.CharacterController.SetCharacterControllerCenter(thirdPersonAppearance .CharacterCenter, player.characterContoller.Value.GetCurrentControllerType() == CharacterControllerType.UnityCharacterController); characterControllerInterface.CharacterController.SetCharacterControllerRadius(thirdPersonAppearance .CharacterRadius, player.characterContoller.Value.GetCurrentControllerType() == CharacterControllerType.UnityCharacterController); } }
public static void UpdateTransform(PlayerEntity player, NetworkAnimatorComponent networkAnimator, PredictedAppearanceComponent appearance, OrientationComponent orientation) { if (!player.hasAppearanceInterface) { return; } // Animation Animator.ClearAnimatorJobContainer(); // 流量优化用 // if (networkAnimator.AnimatorParameters == null) // { // networkAnimator.SetAnimatorParamsWithoutChangeData( // NetworkAnimatorUtil.GetAnimatorParams(player.thirdPersonAnimator.UnityAnimator)); // networkAnimator.ConvertCompressDataToStructureData(); // } AnimatorPoseReplayer.ReplayPose(networkAnimator.AnimatorLayers, networkAnimator.AnimatorParameters, player.thirdPersonAnimator.UnityAnimator); Animator.BatchUpdate(); // equipment(pan) var appearanceInterface = player.appearanceInterface; appearanceInterface.Appearance.SyncLatestFrom(player.latestAppearance); appearanceInterface.Appearance.SyncPredictedFrom(appearance); appearanceInterface.Appearance.TryRewind(); var characterBoneInterface = player.characterBoneInterface; var thirdPersonAppearance = player.thirdPersonAppearance; var characterBone = player.characterBone; var characterControllerInterface = player.characterControllerInterface; characterBoneInterface.CharacterBone.Peek(thirdPersonAppearance.PeekDegree); var param = new CodeRigBoneParam { PitchAmplitude = orientation.Pitch, OverlayAnimationWeight = networkAnimator.AnimatorLayers[NetworkAnimatorLayer.PlayerUpperBodyOverlayLayer].Weight, PostureWhenOverlay = thirdPersonAppearance.Posture, // 预测时,IK不生效 IKActive = ActiveIK(thirdPersonAppearance.Action, thirdPersonAppearance.Posture, thirdPersonAppearance.NextPosture, thirdPersonAppearance.Movement), HeadPitch = characterBone.PitchHeadAngle, HeadYaw = characterBone.RotHeadAngle, CurrentHandPitch = characterBone.CurrentPitchHandAngle, WeaponRot = characterBone.WeaponRot, FirstPersonPositionOffset = characterBone.FirstPersonPositionOffset, FirstPersonRotationOffset = characterBone.FirstPersonRotationOffset, FirstPersonSightOffset = characterBone.FirstPersonSightOffset }; // code controlled pose characterBoneInterface.CharacterBone.WeaponRotPlayback(param); characterBoneInterface.CharacterBone.Update(param); player.characterContoller.Value.SetCurrentControllerType( ThirdPersonPostureTool.ConvertToPostureInConfig(thirdPersonAppearance.Posture)); // 更新包围盒 if (thirdPersonAppearance.NeedUpdateController) { characterControllerInterface.CharacterController.SetCharacterControllerHeight(thirdPersonAppearance .CharacterHeight, player.characterContoller.Value.GetCurrentControllerType() == CharacterControllerType.UnityCharacterController, thirdPersonAppearance.CharacterStandHeight); characterControllerInterface.CharacterController.SetCharacterControllerCenter(thirdPersonAppearance .CharacterCenter, player.characterContoller.Value.GetCurrentControllerType() == CharacterControllerType.UnityCharacterController); characterControllerInterface.CharacterController.SetCharacterControllerRadius(thirdPersonAppearance .CharacterRadius, player.characterContoller.Value.GetCurrentControllerType() == CharacterControllerType.UnityCharacterController); } }