public void PreUpdate(FollowRotParam param, ICharacterBone characterBone) { //人物正向和载具正向相差180度 var curAngle = param.CameraFreeYaw; var needReverse = FollowRotHelper.NeedReverse(); if (needReverse) { curAngle = curAngle + (curAngle > 0 ? -180 : 180); } if (curAngle * characterBone.LastHeadRotAngle < _horizontalHeadRotMax * _horizontalHeadRotMin ) //头部水平旋转角穿过+-180度(暂定最大旋转角度为+-60) { characterBone.LastHeadRotSlerpTime = param.ClientTime; characterBone.IsHeadRotCW = curAngle > 0; // needReverse // ? curAngle < 0 // : curAngle > 0; } if (FollowRotHelper.ForbidRot()) { characterBone.ForbidRot = true; } else if (param.CameraFreeNowMode != (byte)ECameraFreeMode.On && param.CameraEulerAngle == Vector3.zero) { characterBone.ForbidRot = false; } if (characterBone.ForbidRot) { characterBone.LastHeadRotAngle = 0; } else { characterBone.LastHeadRotAngle = curAngle; } }
public void PreUpdate(FollowRotParam param, ICharacterBone characterBone, float deltaTime) { //人物正向和载具正向相差180度 var curAngle = param.CameraFreeYaw; var needReverse = FollowRotHelper.NeedReverse(); if (needReverse) { curAngle = curAngle + (curAngle > 0 ? -180 : 180); } if (curAngle > NoHeadRotStart) { curAngle = 0; } if (curAngle < -NoHeadRotStart) { curAngle = 0; } if (FollowRotHelper.ForbidRot()) { characterBone.ForbidRot = true; } else { characterBone.ForbidRot = false; } var aimAngle = characterBone.ForbidRot ? 0 : curAngle; characterBone.LastHeadRotAngle = CalcuStepRotAngle(aimAngle, characterBone.LastHeadRotAngle, deltaTime); CalcCurrentHandPitch(FollowRotHelper.PitchHandAngle(), deltaTime); }