started building out level
Signed-off-by: sdqhome\caleb <caleb@sdqhome.co.uk>
This commit is contained in:
@@ -96,6 +96,12 @@ public class CameraController : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
[Header("Obstacle Collision Avoidance")]
|
||||
[SerializeField] private bool avoidCollisions = true;
|
||||
[SerializeField] private LayerMask collisionLayers = ~0; // Default to all layers
|
||||
[SerializeField] private float cameraRadius = 0.3f; // Radius for SphereCast check
|
||||
[SerializeField] private float minCollisionDistance = 1.5f;
|
||||
|
||||
private void UpdateCameraPosition()
|
||||
{
|
||||
// Calculate focus point on player
|
||||
@@ -103,8 +109,21 @@ public class CameraController : MonoBehaviour
|
||||
|
||||
// Calculate orbit rotation & offset vector
|
||||
Quaternion rotation = Quaternion.Euler(currentPitch, currentYaw, 0);
|
||||
Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);
|
||||
Vector3 targetCameraPos = focusPoint + (rotation * negDistance);
|
||||
Vector3 desiredCameraDir = (rotation * Vector3.back).normalized;
|
||||
Vector3 targetCameraPos = focusPoint + (desiredCameraDir * distance);
|
||||
|
||||
float adjustedDistance = distance;
|
||||
|
||||
// Check for obstacle collision along the line from focusPoint to desired camera position
|
||||
if (avoidCollisions)
|
||||
{
|
||||
if (Physics.SphereCast(focusPoint, cameraRadius, desiredCameraDir, out RaycastHit hit, distance, collisionLayers))
|
||||
{
|
||||
// Move camera in front of the hit point
|
||||
adjustedDistance = Mathf.Max(hit.distance - 0.1f, minCollisionDistance);
|
||||
targetCameraPos = focusPoint + (desiredCameraDir * adjustedDistance);
|
||||
}
|
||||
}
|
||||
|
||||
// Smoothly interpolate camera position and rotation
|
||||
transform.position = Vector3.Lerp(transform.position, targetCameraPos, smoothSpeed * Time.deltaTime);
|
||||
|
||||
Reference in New Issue
Block a user