using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.XR; using static UnityEngine.GraphicsBuffer; public class WeaponSelectMenu : MonoBehaviour { public Transform headTransform; public Transform imageTransform; private Vector3 originalScale; private Coroutine currentTransition; private Hand activeHand; private void Awake() { originalScale = transform.localScale; } private void Start() { Hide(); } public void Update() { transform.rotation = Quaternion.LookRotation(transform.position - headTransform.position); if (activeHand != null) { Vector3 relative = transform.InverseTransformPoint(activeHand.transform.position); float angle = Mathf.Atan2(relative.x, relative.z) * Mathf.Rad2Deg; imageTransform.localRotation = Quaternion.Euler(0f, 0f, angle); } } public void Show(Hand hand) { activeHand = hand; transform.position = hand.transform.position; foreach (Transform t in transform) { t.gameObject.SetActive(true); } CancelCurrentTransition(); currentTransition = StartCoroutine(Co_ScaleTransition(false, 0.3f)); } public void Hide() { activeHand = null; CancelCurrentTransition(); currentTransition = StartCoroutine(Co_ScaleTransition(true, 0.3f)); } public void CancelCurrentTransition() { if (currentTransition != null) StopCoroutine(currentTransition); } private IEnumerator Co_ScaleTransition(bool hide, float duration) { float timeElapsed = 0; do { timeElapsed += Time.deltaTime; float normalizedTime = timeElapsed / duration; if (hide) { transform.localScale = Vector3.Lerp(transform.localScale, Vector3.zero, Easing.Cubic.In(normalizedTime)); } else { transform.localScale = Vector3.Lerp(transform.localScale, originalScale, Easing.Cubic.Out(normalizedTime)); } yield return null; } while (timeElapsed < duration); foreach (Transform t in transform) { t.gameObject.SetActive(!hide); } } }