You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.9 KiB
C#
54 lines
1.9 KiB
C#
using UnityEngine;
|
|
using Cinemachine;
|
|
|
|
public class FreeLookCamera360Panning : MonoBehaviour
|
|
{
|
|
public CinemachineFreeLook freeLookCamera;
|
|
public Transform player; // Player's Transform to follow
|
|
public float panSpeed = 10f; // Speed of panning
|
|
public float edgeThreshold = 10f; // Edge detection range in pixels
|
|
|
|
private bool isPanning = false;
|
|
|
|
void Update()
|
|
{
|
|
HandleEdgeScrolling();
|
|
}
|
|
|
|
void HandleEdgeScrolling()
|
|
{
|
|
Vector3 mousePos = Input.mousePosition;
|
|
float screenWidth = Screen.width;
|
|
float screenHeight = Screen.height;
|
|
Vector3 moveDirection = Vector3.zero;
|
|
|
|
// Detect if cursor is near screen edges
|
|
if (mousePos.x <= edgeThreshold) moveDirection += -freeLookCamera.transform.right; // Move left
|
|
if (mousePos.x >= screenWidth - edgeThreshold) moveDirection += freeLookCamera.transform.right; // Move right
|
|
if (mousePos.y <= edgeThreshold) moveDirection += -freeLookCamera.transform.forward; // Move backward
|
|
if (mousePos.y >= screenHeight - edgeThreshold) moveDirection += freeLookCamera.transform.forward; // Move forward
|
|
|
|
if (moveDirection != Vector3.zero)
|
|
{
|
|
if (!isPanning)
|
|
{
|
|
freeLookCamera.Follow = null; // Stop following the player
|
|
freeLookCamera.LookAt = null; // Stop aiming at the player
|
|
isPanning = true;
|
|
}
|
|
|
|
// Move the camera in world space (360-degree movement)
|
|
freeLookCamera.transform.Translate(moveDirection * panSpeed * Time.deltaTime, Space.World);
|
|
}
|
|
else
|
|
{
|
|
if (isPanning)
|
|
{
|
|
freeLookCamera.Follow = player; // Re-enable following the player
|
|
freeLookCamera.LookAt = player; // Re-enable aiming at the player
|
|
isPanning = false;
|
|
}
|
|
}
|
|
}
|
|
}
|