From 8691bc52a6721ce38327a3000309c6b0b7c78256 Mon Sep 17 00:00:00 2001 From: SmallFox <2806143047@qq.com> Date: Fri, 22 May 2026 19:21:56 +0800 Subject: 相机碰撞 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 相机碰撞完工 --- Assets/Scripts/CameraHandler.cs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'Assets/Scripts') 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; } } } -- cgit