aboutsummaryrefslogtreecommitdiff
path: root/Assets/Scripts/CameraHandler.cs
diff options
context:
space:
mode:
authorSmallFox <2806143047@qq.com>2026-05-31 17:42:01 +0800
committerSmallFox <2806143047@qq.com>2026-05-31 17:42:01 +0800
commitff1e4698f877ead17ee723ff465f26fad58cd0a0 (patch)
tree14a97ffbf7e360c8676ba81037d582b9c0aaaec6 /Assets/Scripts/CameraHandler.cs
parentdca6ed8a79a1b4df00720a02f5ae96b2ec9e7283 (diff)
合并最新分支,重构Roll,增加了Step_Back,有点手感问题后面调
Diffstat (limited to 'Assets/Scripts/CameraHandler.cs')
-rw-r--r--Assets/Scripts/CameraHandler.cs16
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;
}
+
}
}