using DG.Tweening; using UnityEngine; public class PushableButton : MonoBehaviour { public delegate void OnButtonPressedDelegate(); public event OnButtonPressedDelegate OnButtonPressed; public Transform movableParts; public float moveDuration = 0.25f; private float upPositionY; private float downPositionY; private bool isButtonDown; private void Awake() { upPositionY = movableParts.localPosition.y; downPositionY = movableParts.localPosition.y - 0.1f; 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")) { movableParts.DOLocalMoveY(downPositionY, moveDuration); isButtonDown = true; OnButtonPressed?.Invoke(); } } public void MoveButtonUp() { movableParts.DOLocalMoveY(upPositionY, moveDuration); isButtonDown = false; } }