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.
HighGroundRoyaleNetcode/Assets/DotaStyleCameraController.cs

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;
}
}
}
}