private void UpdateCollisions(CameraStateOutputNewComponent calsOut, CameraFinalOutputNewComponent camera, Vector3 punchRotation, PlayerEntity player, int curTime) { var doLag = !player.appearanceInterface.Appearance.IsFirstPerson; var realRotation = Quaternion.Euler(calsOut.ArchorEulerAngle + calsOut.EulerAngle + punchRotation); var postOffset = calsOut.ArchorPostOffset + calsOut.PostOffset; var realArchorOffset = calsOut.ArchorOffset; var realPostOffset = postOffset; var archorRotation = Quaternion.Euler(0, calsOut.ArchorEulerAngle.y, 0); //计算头顶位置 _archoroffsetArm.Offset = realArchorOffset / 2; var heightTestStart = calsOut.ArchorPosition + archorRotation * realArchorOffset / 2; _archoroffsetArm.Update(heightTestStart, archorRotation, curTime - LastTime, doLag, calsOut.NeedDetectDistance); realArchorOffset = _archoroffsetArm.LastLoc - calsOut.ArchorPosition; //计算锚点位置 _postOffsetArm.Offset = realPostOffset; _postOffsetArm.Update(_archoroffsetArm.LastLoc, archorRotation, curTime - LastTime, false, calsOut.NeedDetectDistance); realPostOffset = _postOffsetArm.LastLoc - _archoroffsetArm.LastLoc; var postOffsetFactor = Mathf.Max(realPostOffset.magnitude / postOffset.magnitude, 1); var startingPosition = calsOut.FinalArchorPosition = calsOut.ArchorPosition + postOffsetFactor * realArchorOffset + realPostOffset; //封闭建筑内拉近摄像机距离 // if(BuildingRestrictTest(calsOut, player)) // calsOut.Offset = calsOut.Offset.normalized * OffsetInBuilding; //相机位置计算 _offsetArm.Offset = calsOut.Offset; _offsetArm.Update(startingPosition, realRotation, curTime - LastTime, doLag, true); camera.PlayerFocusPosition = startingPosition; camera.Position = _offsetArm.LastLoc; camera.EulerAngle = calsOut.ArchorEulerAngle + calsOut.EulerAngle + punchRotation; camera.EulerAngle.x = YawPitchUtility.Normalize(camera.EulerAngle.x); camera.EulerAngle.y = YawPitchUtility.Normalize(camera.EulerAngle.y); camera.EulerAngle.z = YawPitchUtility.Normalize(camera.EulerAngle.z); camera.Fov = calsOut.Fov; camera.Far = calsOut.Far; camera.Near = calsOut.Near; #if UNITY_EDITOR var p1 = calsOut.ArchorPosition; var p2 = _archoroffsetArm.LastLoc; var p3 = startingPosition; var p4 = _offsetArm.LastLoc; Debug.DrawLine(p1, p2, Color.red); Debug.DrawLine(p2, p3, Color.green); Debug.DrawLine(p3, p4, Color.blue); #endif }
private void UpdateCollisions(CameraStateOutputNewComponent calsOut, CameraFinalOutputNewComponent camera, Vector3 punchRotation, PlayerEntity player, bool doLag, int curTime) { var realRotation = Quaternion.Euler(calsOut.ArchorEulerAngle + calsOut.EulerAngle + punchRotation); var index = (player.gamePlay.JobAttribute == (int)EJobAttribute.EJob_Variant) ? 0.75f : 1f; var postOffset = calsOut.ArchorPostOffset + calsOut.PostOffset; var realArchorOffset = calsOut.ArchorOffset; var realPostOffset = postOffset; var archorRotation = Quaternion.Euler(0, calsOut.ArchorEulerAngle.y, 0); //计算头顶位置 _archoroffsetArm.Offset = realArchorOffset / 2 * index; var heightTestStart = calsOut.ArchorPosition + archorRotation * realArchorOffset / 2 * index; _archoroffsetArm.Update(heightTestStart, archorRotation, curTime - LastTime, doLag, calsOut.NeedDetectDistance); realArchorOffset = (_archoroffsetArm.LastLoc - calsOut.ArchorPosition); //计算锚点位置 _postOffsetArm.Offset = realPostOffset * index; _postOffsetArm.Update(_archoroffsetArm.LastLoc, archorRotation, curTime - LastTime, false, calsOut.NeedDetectDistance); realPostOffset = (_postOffsetArm.LastLoc - _archoroffsetArm.LastLoc); var postOffsetFactor = Mathf.Max(realPostOffset.magnitude / postOffset.magnitude, 1); var startingPosition = calsOut.FinalArchorPosition = calsOut.ArchorPosition + postOffsetFactor * realArchorOffset + realPostOffset; //相机位置计算 _offsetArm.Offset = calsOut.Offset * index; _offsetArm.Update(startingPosition, realRotation, curTime - LastTime, doLag, true); camera.PlayerFocusPosition = startingPosition; camera.Position = _offsetArm.LastLoc; camera.EulerAngle = calsOut.ArchorEulerAngle + calsOut.EulerAngle + punchRotation; camera.EulerAngle.x = YawPitchUtility.Normalize(camera.EulerAngle.x); camera.EulerAngle.y = YawPitchUtility.Normalize(camera.EulerAngle.y); camera.EulerAngle.z = YawPitchUtility.Normalize(camera.EulerAngle.z); camera.Fov = calsOut.Fov; camera.Far = calsOut.Far; camera.Near = calsOut.Near; #if UNITY_EDITOR var p1 = calsOut.ArchorPosition; var p2 = _archoroffsetArm.LastLoc; var p3 = startingPosition; var p4 = _offsetArm.LastLoc; Debug.DrawLine(p1, p2, Color.red); Debug.DrawLine(p2, p3, Color.green); Debug.DrawLine(p3, p4, Color.blue); #endif }