Exemple #1
0
        public void WeaponRotUpdate(CodeRigBoneParam param, float deltaTime)
        {
            CalcWeaponRotAngle(_rightClavicleP3);
            CalcCurrentWeaponRotAngle(deltaTime);

            _isWeaponRotState = _currentWeaponPitchPercent >= -1 && _currentWeaponPitchPercent < 0;
        }
Exemple #2
0
        // 旋转枪械,防穿模
        private void RotateWeapon(CodeRigBoneParam param)
        {
            Clear();
            if (!param.IsEmptyHand)
            {
                if (param.IsProne)
                {
                    RotateWeaponHelperByProne(param.MuzzleLocationP3, _rightHandP3);
                }
                else
                {
                    if (null != param.MuzzleLocationP3 && null != _rightHandP3)
                    {
                        // 计算经过手臂旋转后的枪口位置
                        Vector3 muzzleLocationP3 = RotateRound(param.MuzzleLocationP3, _rightClavicleP3.position, _characterP3.transform.right, param.HandPitch);
                        RotateWeaponHelper(muzzleLocationP3, _rightHandP3, param.HandPitch);
                    }

                    if (null != param.MuzzleLocationP1 && null != _rightHandP1)
                    {
                        // 计算经过手臂旋转后的枪口位置
                        Vector3 muzzleLocationP1 = RotateRound(param.MuzzleLocationP1, _rightClavicleP1.position, _characterP1.transform.right, param.HandPitch);
                        RotateWeaponHelper(muzzleLocationP1, _rightHandP1, param.HandPitch);
                    }
                }
            }
        }
        private bool UpdateSightData(ref CodeRigBoneParam param)
        {
            var isEmptyInHand      = _weaponController.IsEmptyHand();
            var weaponIdInHand     = _weaponController.GetWeaponIdInHand();
            var realWeaponIdInHand = weaponIdInHand;
            // 当前枪瞄准镜ID
            var scopeIdInCurrentWeapon = _weaponController.GetCurrentScopeId();
            var needIk = false;

            if (!isEmptyInHand)
            {
                param.SightOffset = SingletonManager.Get <WeaponAvatarConfigManager>().GetSightDistance(weaponIdInHand);
                needIk            = _attachmentNeedIK ||
                                    SingletonManager.Get <WeaponAvatarConfigManager>().GetLeftHandIK(weaponIdInHand);
                var avatarConfig = SingletonManager.Get <WeaponAvatarConfigManager>().GetConfigById(weaponIdInHand);
                if (null != avatarConfig)
                {
                    //当前武器为皮肤武器
                    if (avatarConfig.ApplyWeaponsId > 0 && avatarConfig.ApplyWeaponsId != weaponIdInHand)
                    {
                        realWeaponIdInHand = avatarConfig.ApplyWeaponsId;
                    }
                }

                /**
                 * 后面改为分辨率模糊匹配
                 */
                // 一人称人物腰位置射偏移
                param.FirstPersonPositionOffset = SingletonManager.Get <FirstPersonOffsetConfigManager>()
                                                  .GetFirstPersonOffsetByScreenRatio(realWeaponIdInHand,
                                                                                     Screen.width / (float)Screen.height);
                // 一人称腰射旋转偏移
                param.FirstPersonRotationOffset = SingletonManager.Get <FirstPersonOffsetConfigManager>()
                                                  .GetFirstPersonRotationOffsetByScreenRatio(realWeaponIdInHand,
                                                                                             Screen.width / (float)Screen.height);
                // 一人称人物肩射位置偏移
                param.FirstPersonSightOffset = SingletonManager.Get <FirstPersonOffsetConfigManager>()
                                               .GetSightOffsetByScreenRatio(realWeaponIdInHand,
                                                                            Screen.width / (float)Screen.height);

                if (scopeIdInCurrentWeapon > 0)
                {
                    // 瞄准镜距人眼距离
                    param.ScopeOffset = SingletonManager.Get <WeaponPartsConfigManager>()
                                        .GetScopeOffset(scopeIdInCurrentWeapon);
                    if (param.IsSight)
                    {
                        //瞄准镜缩放
                        param.ScopeScale = SingletonManager.Get <WeaponPartsConfigManager>()
                                           .GetSightModelScale(scopeIdInCurrentWeapon);
                    }
                }
                else if (param.IsSight)
                {
                    param.ScopeScale = SingletonManager.Get <WeaponConfigManager>().GetAimModelScale(weaponIdInHand);
                }
            }

            return(needIk);
        }
        public void Update(CodeRigBoneParam param)
        {
            param.PeekAmplitude            = PeekDegree;
            param.SightProgress            = _sightProgress;
            param.FastMoveHorizontalShift  = _fastMoveHorizontalShift;
            param.FastMoveVerticalShift    = _fastMoveVerticalShift;
            param.SightMoveHorizontalShift = _sightMoveHorizontalShift;
            param.SightMoveVerticalShift   = _sightMoveVerticalShift;
            param.IsFirstPerson            = IsFirstPerson;

            var needIk = UpdateSightData(ref param);

            // 有动作状态控制是否需要开启IK
            param.IKActive    = IsIKActive || param.IKActive && needIk;
            param.IsEmptyHand = _weaponController.IsEmptyHand();
            if (param.IsEmptyHand)
            {
                if (!IsFirstPerson)
                {
                    //第三人称空手取消pitch
                    param.PitchAmplitude = 0;
                }

                // 空手状态没有随动效果
                param.FastMoveHorizontalShift = 0;
                param.FastMoveVerticalShift   = 0;
                _attachmentNeedIK             = false;
            }

            param.SightModelOffset = YawPitchUtility.Normalize(_characterRoot.transform.rotation).x;

            _boneRigging.Update(param);
            _followRot.Update(param);
            UpdateIk();
        }
Exemple #5
0
 public void Update(CodeRigBoneParam param)
 {
     FollowRotFunc(param.HeadPitch,
                   param.HeadYaw,
                   param.HandPitch,
                   param.HeadRotProcess,
                   param.IsHeadRotCW,
                   param.IsServer);
 }
Exemple #6
0
        private void UpdateBones(PlayerEntity player)
        {
            var orientation                  = player.orientation;
            var networkAnimator              = player.networkAnimator;
            var characterBoneInterface       = player.characterBoneInterface;
            var thirdPersonAppearance        = player.thirdPersonAppearance;
            var characterBone                = player.characterBone;
            var characterControllerInterface = player.characterControllerInterface;

            characterBoneInterface.CharacterBone.Peek(thirdPersonAppearance.PeekDegree);
            try
            {
                _subCharacterBoneUpdateInfo.BeginProfileOnlyEnableProfile();
                var param = new CodeRigBoneParam
                {
                    PitchAmplitude         = orientation.Pitch,
                    OverlayAnimationWeight = networkAnimator.AnimatorLayers[NetworkAnimatorLayer.PlayerUpperBodyOverlayLayer].Weight,
                    PostureWhenOverlay     = thirdPersonAppearance.Posture,
                    // 预测时,IK不生效
                    IKActive = PlayerEntityUtility.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);
            }
            finally
            {
                _subCharacterBoneUpdateInfo.EndProfileOnlyEnableProfile();
            }

            try
            {
                _subCharacterControllerUpdateInfo.BeginProfileOnlyEnableProfile();
                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);
                }
            }
            finally
            {
                _subCharacterControllerUpdateInfo.EndProfileOnlyEnableProfile();
            }
        }
        private void BoneUpdate(PlayerEntity player)
        {
            var appearanceP1  = player.appearanceInterface.FirstPersonAppearance;
            var characterBone = player.characterBoneInterface.CharacterBone;

            _fsmOutputs.ResetOutput();
            characterBone.Execute(_fsmOutputs.AddOutput);
            _fsmOutputs.SetOutput(player);

            if (!SharedConfig.IsServer)
            {
                FollowRotHelper.Player = player;
                var rotParam = new FollowRotParam
                {
                    CameraFreeYaw     = player.cameraStateNew.FreeYaw,
                    CameraFreeNowMode = player.cameraStateNew.FreeNowMode,
                    CameraEulerAngle  = player.cameraFinalOutputNew.EulerAngle,
                    ClientTime        = player.time.ClientTime
                };
                characterBone.PreUpdate(rotParam, player.characterBoneInterface.CharacterBone);
                characterBone.SyncTo(player.characterBone);
            }

            var animator    = player.thirdPersonAnimator.UnityAnimator;
            var state       = player.stateInterface.State;
            var postureType = ThirdPersonAppearanceUtils.GetPosture(state);
            var action      = player.stateInterface.State.GetActionState();
            var keepAction  = player.stateInterface.State.GetActionKeepState();
            var posture     = player.stateInterface.State.GetCurrentPostureState();

            CodeRigBoneParam param = new CodeRigBoneParam
            {
                PitchAmplitude         = player.orientation.Pitch - player.orientation.WeaponPunchPitch * 2,
                OverlayAnimationWeight = animator.GetLayerWeight(NetworkAnimatorLayer.PlayerUpperBodyOverlayLayer),
                PostureWhenOverlay     = postureType,
                IsSight = state.GetActionKeepState() == ActionKeepInConfig.Sight || state.GetNextActionKeepState() == ActionKeepInConfig.Sight,
                SightHorizontalShift = appearanceP1.SightShift.Buff * player.firstPersonAppearance.SightHorizontalShift,
                SightVerticalShift   = appearanceP1.SightShift.Buff * player.firstPersonAppearance.SightVerticalShift,
                SightShiftBuff       = player.oxygenEnergyInterface.Oxygen.SightShiftBuff,
                IKActive             = IKFilter.FilterPlayerIK(action, keepAction, posture),
                HeadPitch            = player.characterBone.PitchHeadAngle,
                HeadYaw        = player.characterBone.RotHeadAngle,
                HandPitch      = player.characterBone.PitchHandAngle,
                HeadRotProcess = player.characterBone.HeadRotProcess,
                IsHeadRotCW    = player.characterBone.IsHeadRotCW,
                WeaponPitch    = player.characterBone.WeaponPitch,
                IsServer       = SharedConfig.IsServer
            };

            characterBone.Update(param);
            if (!SharedConfig.IsServer)
            {
                characterBone.WeaponRotUpdate(param);
            }
        }
Exemple #8
0
 public void Update(CodeRigBoneParam param)
 {
     try
     {
         _mainInfo.BeginProfileOnlyEnableProfile();
         FollowRotFunc(param.HeadPitch,
                       param.HeadYaw,
                       param.CurrentHandPitch,
                       param.IsServer);
     }
     finally
     {
         _mainInfo.EndProfileOnlyEnableProfile();
     }
 }
Exemple #9
0
 // 旋转枪械,防穿模
 private void RotateWeapon(CodeRigBoneParam param)
 {
     if (!param.IsEmptyHand)
     {
         if (null != param.MuzzleLocationP3 && null != _rightHandP3)
         {
             // 计算经过手臂旋转后的枪口位置
             Vector3 muzzleP3 = RotateRound(param.MuzzleLocationP3, _rightClavicleP3.position, _characterP3.transform.right, param.HandPitch);
             RotateWeaponHelper(muzzleP3, _rightHandP3, param.HandPitch, param.WeaponPitch);
             return;
         }
         _weaponPitchPercent = 0;
     }
     _weaponPitchPercent = 0;
 }
        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));
        }
Exemple #11
0
        private void RotateWeaponPlayback(CodeRigBoneParam param)
        {
            if (!param.IsEmptyHand)
            {
                if (null != param.MuzzleLocationP3 && null != _rightHandP3)
                {
                    _rightHandP3.rotation =
                        Quaternion.AngleAxis(param.WeaponRot, _characterP3.transform.right) * _rightHandP3.rotation;
                }

                if (null != param.MuzzleLocationP1 && null != _rightHandP1)
                {
                    _rightHandP1.rotation =
                        Quaternion.AngleAxis(param.WeaponRot, _characterP3.transform.right) * _rightHandP1.rotation;
                }
            }
        }
        public void WeaponRotUpdate(CodeRigBoneParam param)
        {
            if (!param.IsEmptyHand)
            {
                // 获取一,三人称枪口位置
                var muzzleTransform = GetLocation(SpecialLocation.MuzzleEffectPosition, CharacterView.ThirdPerson);
                if (muzzleTransform)
                {
                    param.MuzzleLocationP3 = muzzleTransform.position;
                }
                else
                {
                    param.IsEmptyHand = true;
                }
            }

            _weaponRot.WeaponRotUpdate(param);
        }
Exemple #13
0
        private bool UpdateSightData(ref CodeRigBoneParam param)
        {
            var isEmptyInHand  = _weaponController.IsEmptyHand();
            var weaponIdInHand = _weaponController.GetWeaponIdInHand();
            // 当前枪瞄准镜ID
            var scopeIdInCurrentWeapon = _weaponController.GetCurrentScopeId();
            var needIk = false;

            if (!isEmptyInHand)
            {
                needIk = _weaponHasIK;

                if (_characterP1 == null)
                {
                    return(needIk);
                }

                param.SightOffset = SingletonManager.Get <WeaponAvatarConfigManager>().GetSightDistance(weaponIdInHand);

                if (scopeIdInCurrentWeapon > 0)
                {
                    // 瞄准镜距人眼距离
                    param.ScopeOffset = SingletonManager.Get <WeaponPartsConfigManager>()
                                        .GetScopeOffset(scopeIdInCurrentWeapon);
                    if (param.IsSight)
                    {
                        //瞄准镜缩放
                        param.ScopeScale = SingletonManager.Get <WeaponPartsConfigManager>()
                                           .GetSightModelScale(scopeIdInCurrentWeapon);
                    }
                }
                else if (param.IsSight)
                {
                    param.ScopeScale = SingletonManager.Get <WeaponResourceConfigManager>().GetAimModelScale(weaponIdInHand);
                }
            }

            return(needIk);
        }
Exemple #14
0
 public void WeaponRotPlayback(CodeRigBoneParam param)
 {
 }
Exemple #15
0
 public void WeaponRotUpdate(CodeRigBoneParam param)
 {
     RotateWeapon(param);
 }
        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);
            }
        }
Exemple #17
0
 public void WeaponRotPlayback(CodeRigBoneParam param)
 {
     _weaponRot.WeaponRotPlayback(param);
 }
        private void BoneUpdate(PlayerEntity player)
        {
            var characterBone = player.characterBoneInterface.CharacterBone;

            _fsmOutputs.ResetOutput();
            characterBone.Execute(_fsmOutputs.AddOutput);
            _fsmOutputs.SetOutput(player);

            if (!SharedConfig.IsServer)
            {
                FollowRotHelper.Player = player;
                var rotParam = new FollowRotParam
                {
                    CameraFreeYaw     = player.cameraStateNew.FreeYaw,
                    CameraFreeNowMode = player.cameraStateNew.FreeNowMode,
                    CameraEulerAngle  = player.cameraFinalOutputNew.EulerAngle,
                    ClientTime        = player.time.ClientTime
                };
                characterBone.PreUpdate(rotParam, player.characterBoneInterface.CharacterBone, _deltaTime);
                characterBone.SyncTo(player.characterBone);
            }

            var animator    = player.thirdPersonAnimator.UnityAnimator;
            var state       = player.stateInterface.State;
            var action      = player.stateInterface.State.GetActionState();
            var nextAction  = player.stateInterface.State.GetNextActionState();
            var keepAction  = player.stateInterface.State.GetActionKeepState();
            var posture     = player.stateInterface.State.GetCurrentPostureState();
            var nextPosture = player.stateInterface.State.GetNextPostureState();
            var movement    = player.stateInterface.State.GetCurrentMovementState();
            var postureType = ThirdPersonAppearanceUtils.GetPosture(posture);

            UpdateOffsetData(player);

            var param = new CodeRigBoneParam
            {
                PitchAmplitude         = player.orientation.Pitch - player.orientation.AccPunchPitchValue * 2,
                OverlayAnimationWeight = animator.GetLayerWeight(NetworkAnimatorLayer.PlayerUpperBodyOverlayLayer),
                PostureWhenOverlay     = postureType,
                IsSight              = state.GetActionKeepState() == ActionKeepInConfig.Sight || state.GetNextActionKeepState() == ActionKeepInConfig.Sight,
                IsIntoSight          = state.GetNextActionKeepState() == ActionKeepInConfig.Sight,
                SightHorizontalShift = /*appearanceP1.SightShift.Buff * */ player.firstPersonAppearance.SightHorizontalShift,
                SightVerticalShift   = /*appearanceP1.SightShift.Buff * */ player.firstPersonAppearance.SightVerticalShift,
                SightShiftBuff       = player.oxygenEnergyInterface.Oxygen.SightShiftBuff,
                IKActive             = IKFilter.FilterPlayerIk(action, nextAction, keepAction, posture, nextPosture, movement),
                HeadPitch            = player.characterBone.PitchHeadAngle,
                HeadYaw              = player.characterBone.RotHeadAngle,
                CurrentHandPitch     = player.characterBone.CurrentPitchHandAngle,
                WeaponRot            = player.characterBone.WeaponRot,
                IsFire   = action == ActionInConfig.Fire,
                IsServer = SharedConfig.IsServer,

                FirstPersonPositionOffset = player.characterBone.FirstPersonPositionOffset,
                FirstPersonRotationOffset = player.characterBone.FirstPersonRotationOffset,
                FirstPersonSightOffset    = player.characterBone.FirstPersonSightOffset
            };

            //     DebugUtil.MyLog("SightVerticalShift:"+param.SightVerticalShift + "||SightVerticalShift:"+param.SightVerticalShift);

            if (!SharedConfig.IsServer)
            {
                characterBone.WeaponRotUpdate(param, _deltaTime);
            }
            else
            {
                characterBone.WeaponRotPlayback(param);
            }
            characterBone.Update(param);
        }
Exemple #19
0
        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);
            }
        }
Exemple #20
0
 public void WeaponRotPlayback(CodeRigBoneParam param)
 {
     RotateWeaponPlayback(param);
 }