Skip to content

Instantly share code, notes, and snippets.

@pppoe252110
Created December 16, 2023 14:03
Show Gist options
  • Save pppoe252110/c6d9bc8103e2f35c7d4953d1c44205b2 to your computer and use it in GitHub Desktop.
Save pppoe252110/c6d9bc8103e2f35c7d4953d1c44205b2 to your computer and use it in GitHub Desktop.
Simple Item Rotation Relative to Camera Script
using UnityEngine;
public class ItemOverview : MonoBehaviour
{
[SerializeField] private Transform center;
[SerializeField] private Transform viewCamera;
[SerializeField] private Transform overviewItem;
[SerializeField] private float itemRotationSpeed = 10f;
[SerializeField] private float cameraRotationSpeed = 0.5f;
[SerializeField] private float cameraScrollSpeed = 1f;
[SerializeField] private float minCameraDistance = 2f;
[SerializeField] private float maxCameraDistance = 5f;
[Range(-90f, 0f)]
[SerializeField] private float maxCameraVerticalAngle = -90f;
[Range(0f, 90f)]
[SerializeField] private float minCameraVerticalAngle = 90f;
private Vector3 cameraRot;
private float cameraDistance;
private Quaternion startRot;
private Vector2 deltaRot;
private void Start()
{
cameraDistance = (minCameraDistance + maxCameraDistance) / 2f;
}
void Update()
{
cameraDistance = Mathf.Clamp(cameraDistance - Input.mouseScrollDelta.y * (cameraScrollSpeed * cameraDistance) / 2f, minCameraDistance, maxCameraDistance);
if (Input.GetKeyDown(KeyCode.Mouse0))
{
startRot = overviewItem.rotation;
deltaRot = Vector2.zero;
}
else if (Input.GetKey(KeyCode.Mouse0))
{
var delta = Input.mousePositionDelta;
deltaRot += new Vector2(delta.x, delta.y);
overviewItem.rotation =
Quaternion.AngleAxis(-deltaRot.x * Mathf.Deg2Rad * itemRotationSpeed, viewCamera.up) *
Quaternion.AngleAxis(deltaRot.y * Mathf.Deg2Rad * itemRotationSpeed, viewCamera.right) *
startRot;
}
if (Input.GetKey(KeyCode.Mouse2) && !Input.GetKeyDown(KeyCode.Mouse2))
{
cameraRot += new Vector3(-Input.mousePositionDelta.y * cameraRotationSpeed, Input.mousePositionDelta.x * cameraRotationSpeed, 0);
cameraRot = new Vector3(Mathf.Clamp(cameraRot.x, -90, 90), cameraRot.y, 0);
viewCamera.rotation = Quaternion.Euler(cameraRot.x, cameraRot.y, 0);
}
viewCamera.position = viewCamera.rotation * Vector3.back * cameraDistance + center.position;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment