diff options
Diffstat (limited to 'Assets/Scripts/CameraHandler.cs')
| -rw-r--r-- | Assets/Scripts/CameraHandler.cs | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/Assets/Scripts/CameraHandler.cs b/Assets/Scripts/CameraHandler.cs index a1cd569..0e4a5e9 100644 --- a/Assets/Scripts/CameraHandler.cs +++ b/Assets/Scripts/CameraHandler.cs @@ -2,6 +2,7 @@ using System; using System.Collections; using System.Collections.Generic; using Unity.Mathematics; +using UnityEditor; using UnityEngine; namespace DS @@ -154,7 +155,6 @@ namespace DS // 计算从枢轴指向摄像机的方向向量 Vector3 direction = cameraTransform.position - cameraPivotTransform.position; direction.Normalize(); - // 从枢轴位置沿 direction 方向进行 SphereCast 检测 // 检测距离为 _targetPosition 的绝对值 if (Physics.SphereCast( @@ -167,10 +167,19 @@ namespace DS { // 计算枢轴到碰撞点的实际距离 float dis = Vector3.Distance(cameraPivotTransform.position, hit.point); - // 摄像机应位于碰撞点前方 cameraCollisionOffSet 处 - _targetPosition = -(dis - cameraCollisionOffSet); + + float newPos = -(dis - cameraCollisionOffSet); + _targetPosition = Mathf.Clamp(newPos, _defaultPosition, -minimumCollisionOffSet); + + // // 摄像机应位于碰撞点前方 cameraCollisionOffSet 处 + // _targetPosition = -(dis - cameraCollisionOffSet); + } else + { + // 无碰撞时,确保相机回到默认位置,但也要限制一下,防止超出 + _targetPosition = Mathf.Clamp(_defaultPosition, _defaultPosition, -minimumCollisionOffSet); } + // 如果计算出的目标距离绝对值太小,强制使用最小值防止视觉异常 if (Mathf.Abs(_targetPosition) < minimumCollisionOffSet) { @@ -186,5 +195,6 @@ namespace DS // 应用位置 cameraTransform.localPosition = _cameraTransformPosition; } + } } |
