wirm/Game/Assets/Brushteeth.cs

83 lines
2.3 KiB
C#
Raw Normal View History

2025-01-31 17:56:22 +08:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.Interaction.Toolkit;
public class Brushteeth : MonoBehaviour
{
public Slider progressBar; // Reference to the Slider (progress bar)
public float progressTime = 5f; // Time for the progress bar to complete
private UnityEngine.XR.Interaction.Toolkit.Interactables.XRGrabInteractable grabInteractable;
private float timer = 0f;
private bool isGrabbing = false;
void Start()
{
grabInteractable = GetComponent<UnityEngine.XR.Interaction.Toolkit.Interactables.XRGrabInteractable>();
if (grabInteractable == null)
{
Debug.LogError("XRGrabInteractable component not found on the object!");
return;
}
// Ensure the progress bar is hidden initially
progressBar.gameObject.SetActive(false);
// Subscribe to grab and release events
grabInteractable.selectEntered.AddListener(OnGrab);
grabInteractable.selectExited.AddListener(OnRelease);
}
void Update()
{
if (isGrabbing)
{
timer += Time.deltaTime;
progressBar.value = timer / progressTime;
if (timer >= progressTime)
{
CompleteProgress();
}
}
}
private void OnGrab(SelectEnterEventArgs args)
{
// Show and reset the progress bar
progressBar.gameObject.SetActive(true);
progressBar.value = 0f;
timer = 0f;
isGrabbing = true;
}
private void OnRelease(SelectExitEventArgs args)
{
// Hide the progress bar and stop the timer
progressBar.gameObject.SetActive(false);
isGrabbing = false;
timer = 0f;
}
private void CompleteProgress()
{
// Hide the progress bar and perform any additional actions when complete
progressBar.gameObject.SetActive(false);
isGrabbing = false;
Debug.Log("Progress completed!");
}
private void OnDestroy()
{
// Unsubscribe from events to avoid memory leaks
if (grabInteractable != null)
{
grabInteractable.selectEntered.RemoveListener(OnGrab);
grabInteractable.selectExited.RemoveListener(OnRelease);
}
}
}