技能主要更新,修复卡顿并加入动画,以及各种其他更新。
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class BgmGyroRotator : MonoBehaviour
|
||||
{
|
||||
public RectTransform target;
|
||||
public float maxRotation = 3f;
|
||||
public float rotX = 1f;
|
||||
public float rotY = 1f;
|
||||
public float rotZ = 0.35f;
|
||||
public float smooth = 8f;
|
||||
public bool useUnscaled = true;
|
||||
|
||||
private Quaternion baseRotation;
|
||||
private bool baseCaptured = false;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (target == null) target = transform as RectTransform;
|
||||
CaptureBase();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (target == null) target = transform as RectTransform;
|
||||
CaptureBase();
|
||||
}
|
||||
|
||||
private void CaptureBase()
|
||||
{
|
||||
if (target == null) return;
|
||||
baseRotation = target.localRotation;
|
||||
baseCaptured = true;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (target == null) return;
|
||||
if (!baseCaptured) CaptureBase();
|
||||
|
||||
Vector2 norm = GetMouseNormalized();
|
||||
Vector3 delta = new Vector3(-norm.y * maxRotation * rotX,
|
||||
norm.x * maxRotation * rotY,
|
||||
norm.x * maxRotation * rotZ);
|
||||
Quaternion targetRot = baseRotation * Quaternion.Euler(delta);
|
||||
float dt = useUnscaled ? Time.unscaledDeltaTime : Time.deltaTime;
|
||||
float t = 1f - Mathf.Exp(-Mathf.Max(0.01f, smooth) * dt);
|
||||
target.localRotation = Quaternion.Slerp(target.localRotation, targetRot, t);
|
||||
}
|
||||
|
||||
private static Vector2 GetMouseNormalized()
|
||||
{
|
||||
Vector2 pos = Input.mousePosition;
|
||||
if (Screen.width <= 1 || Screen.height <= 1)
|
||||
return Vector2.zero;
|
||||
float x = (pos.x / Screen.width) * 2f - 1f;
|
||||
float y = (pos.y / Screen.height) * 2f - 1f;
|
||||
return new Vector2(Mathf.Clamp(x, -1f, 1f), Mathf.Clamp(y, -1f, 1f));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user