aboutsummaryrefslogtreecommitdiff
path: root/Assets/Scripts/CameraHandler.cs
diff options
context:
space:
mode:
authorSmallFox <2806143047@qq.com>2026-05-22 19:21:56 +0800
committerSmallFox <2806143047@qq.com>2026-05-22 19:21:56 +0800
commit8691bc52a6721ce38327a3000309c6b0b7c78256 (patch)
tree8a8250ac0a4860476de28dd92faa49ee300b718f /Assets/Scripts/CameraHandler.cs
parent3dcf88a36c072e42005c48dae419c66996c96f84 (diff)
相机碰撞
相机碰撞完工
Diffstat (limited to 'Assets/Scripts/CameraHandler.cs')
-rw-r--r--Assets/Scripts/CameraHandler.cs22
1 files changed, 22 insertions, 0 deletions
diff --git a/Assets/Scripts/CameraHandler.cs b/Assets/Scripts/CameraHandler.cs
index c815fae..38ab888 100644
--- a/Assets/Scripts/CameraHandler.cs
+++ b/Assets/Scripts/CameraHandler.cs
@@ -45,6 +45,8 @@ namespace DS
Vector3 targetPosition = Vector3.SmoothDamp(_myTransform.position, targetTransform.position,
ref cameraFollowVelocity, delta / followSpeed);
_myTransform.position = targetPosition;
+
+ HandleCameraCollisions(delta);
}
public void HandleCameraRotation(float delta, float mouseInputX, float mouseInputY)
@@ -63,8 +65,28 @@ namespace DS
targetRotation = Quaternion.Euler(rotation);
cameraPivotTransform.localRotation = targetRotation;
+ }
+
+ public void HandleCameraCollisions(float delta)
+ {
+ _targetPosition = _defaultPosition;
+ RaycastHit hit;
+ Vector3 direction = cameraTransform.position - cameraPivotTransform.position;
+ direction.Normalize();
+
+ if (Physics.SphereCast(cameraPivotTransform.position,cameraSphereRadius,direction,out hit,Mathf.Abs(_targetPosition)))
+ {
+ float dis = Vector3.Distance(cameraPivotTransform.position, hit.point);
+ _targetPosition = -(dis - cameraCollisionOffSet);
+ }
+ if (Mathf.Abs(_targetPosition) < minimumCollisionOffSet)
+ {
+ _targetPosition = -minimumCollisionOffSet;
+ }
+ _cameraTransformPosition.z = Mathf.Lerp(cameraTransform.localPosition.z, _targetPosition, delta / 0.2f);
+ cameraTransform.localPosition = _cameraTransformPosition;
}
}
}