ProjectDDD/Assets/Plugins/AllIn1VfxToolkit/Demo & Assets/Demo/Scripts/AllIn1MouseRotate.cs
2025-07-08 19:46:31 +09:00

98 lines
3.6 KiB
C#

using UnityEngine;
using UnityEngine.UI;
namespace AllIn1VfxToolkit.Demo.Scripts
{
public class AllIn1MouseRotate : MonoBehaviour
{
[SerializeField] private Transform objectToRotate;
[SerializeField] private float rotationSpeedHorizontal = 10f;
[SerializeField] private float translateVerticalSpeed = 5f;
[SerializeField] private float translateScrollSpeed = 2f;
[Space, Header("Lock Cursor")]
[SerializeField] private bool lockCursor;
[SerializeField] private KeyCode lockCursorKeyCode;
[SerializeField] private AllIn1DemoScaleTween hideUiButtonTween;
[SerializeField] private Image lockedButtonImage;
[SerializeField] private Text lockedButtonText;
[SerializeField] private Color lockedButtonColor;
private bool cursorIsLocked;
[Space, Header("Movement Bounds")]
[SerializeField] private float maxHeight = 40f;
[SerializeField] private float maxZoom = 2f;
[SerializeField] private float minZoom = 40f;
private Vector3 currPosition = Vector3.zero;
private float dt;
private void Start()
{
if(lockCursor) cursorIsLocked = false;
else cursorIsLocked = true;
ToggleCursorLocked();
}
private void Update()
{
if(Time.timeSinceLevelLoad < 0.5f) return; //We wait a few moments to allow scene to fully load up
dt = Time.unscaledDeltaTime;
CamRotateAroundYAxis();
currPosition = objectToRotate.position;
CamHeightTranslate();
CamZoom();
if(Input.GetKeyDown(lockCursorKeyCode)) ToggleCursorLocked();
}
private void CamRotateAroundYAxis()
{
float mouseInputX = Input.GetAxis("Mouse X") * dt * 10f * rotationSpeedHorizontal;
objectToRotate.RotateAround(transform.position, Vector3.up, mouseInputX);
}
private void CamHeightTranslate()
{
float mouseInputY = Input.GetAxis("Mouse Y") * dt * translateVerticalSpeed;
currPosition.y = Mathf.Clamp(currPosition.y + mouseInputY, 0.25f, maxHeight);
objectToRotate.position = currPosition;
objectToRotate.LookAt(transform);
}
private void CamZoom()
{
float mouseInputWheel = Input.GetAxis("Mouse ScrollWheel") * dt * 100f * translateScrollSpeed;
Vector3 currZoomVector = objectToRotate.forward * mouseInputWheel;
if(mouseInputWheel > 0 && Vector3.Distance(transform.position, objectToRotate.position) <= maxZoom) currZoomVector = Vector3.zero;
else if(mouseInputWheel < 0 && Vector3.Distance(transform.position, objectToRotate.position) >= minZoom) currZoomVector = Vector3.zero;
currPosition += currZoomVector;
objectToRotate.position = currPosition;
}
public void ToggleCursorLocked()
{
cursorIsLocked = !cursorIsLocked;
hideUiButtonTween.ScaleUpTween();
if(cursorIsLocked)
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
lockedButtonImage.color = lockedButtonColor;
lockedButtonText.text = "Unlock Cursor";
}
else
{
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
lockedButtonImage.color = Color.white;
lockedButtonText.text = "Lock Cursor";
}
}
}
}