1
0
forked from cgvr/DeltaVR

radio button can be released

This commit is contained in:
2026-02-17 17:40:46 +02:00
parent 8e606782ab
commit 5c7103a79b
4 changed files with 80 additions and 3 deletions

View File

@@ -0,0 +1,66 @@
using DG.Tweening;
using UnityEngine;
public class ReleasableButton : MonoBehaviour
{
public delegate void OnButtonPressedDelegate();
public event OnButtonPressedDelegate OnButtonPressed;
public Transform movableParts;
public float moveDuration = 0.25f;
public float moveAmount = 0.05f;
private float upPositionY;
private float downPositionY;
private bool isButtonDown;
private void Awake()
{
upPositionY = movableParts.localPosition.y;
downPositionY = movableParts.localPosition.y - moveAmount;
isButtonDown = false;
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnCollisionEnter(Collision collision)
{
if (!isButtonDown && collision.gameObject.tag.EndsWith("Hand"))
{
Activate();
OnButtonPressed?.Invoke();
}
}
private void OnCollisionExit(Collision collision)
{
if (isButtonDown && collision.gameObject.tag.EndsWith("Hand"))
{
Deactivate();
}
}
private void Activate()
{
movableParts.DOLocalMoveY(downPositionY, moveDuration);
isButtonDown = true;
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Click, gameObject);
}
private void Deactivate()
{
movableParts.DOLocalMoveY(upPositionY, moveDuration);
isButtonDown = false;
AudioManager.Instance.PlayAttachedInstance(FMODEvents.Instance.Click, gameObject);
}
}