using DG.Tweening; using UnityEngine; public class StartMenuAnimations : MonoBehaviour { public GameObject maskObj; public GameObject mixButton; public GameObject attackButton; public GameObject gotoButton; public GameObject freeButton; public float animeDuration = 0.2f; public Vector3 mixDestination = new Vector3(-85, 29, 0); public Vector3 attackDestination = new Vector3(-100, 0, 0); public Vector3 gotoDestination = new Vector3(-115, -29, 0); public Vector3 freeDestination = new Vector3(-130, -58, 0); public float maskScaleX = 1; public float maskScaleY = 0.4f; private Vector3 mixOriginDestination; private Vector3 attackOriginDestination; private Vector3 gotoOriginDestination; private Vector3 freeOriginDestination; private PolygonCollider2D parallelogramPolygon; private bool isMouseOverMask = false; private void Start() { // get start position mixOriginDestination = mixButton.transform.position; attackOriginDestination = attackButton.transform.position; gotoOriginDestination = gotoButton.transform.position; freeOriginDestination = freeButton.transform.position; // transform local vector3 to world vector3 by parent mixDestination += mixButton.transform.parent.position; attackDestination += attackButton.transform.parent.position; gotoDestination += gotoButton.transform.parent.position; freeDestination += freeButton.transform.parent.position; //get polygon from maskOBJ parallelogramPolygon = maskObj.GetComponent(); // minimize mask object MinimizeMaskObj(); } private void Update() { // check if mouse is in parallelogram if (!isMouseOverMask && parallelogramPolygon.OverlapPoint(Input.mousePosition)) { isMouseOverMask = true; OnMaskPointerEnter(); } else if (isMouseOverMask && !parallelogramPolygon.OverlapPoint(Input.mousePosition)) { isMouseOverMask = false; OnMaskPointerExit(); } } private void OnMaskPointerEnter() { // dotween move button mixButton.transform.DOMove(mixDestination, animeDuration, true).SetEase(Ease.OutCirc).Play(); attackButton.transform.DOMove(attackDestination, animeDuration, true).SetEase(Ease.OutCirc).Play(); gotoButton.transform.DOMove(gotoDestination, animeDuration, true).SetEase(Ease.OutCirc).Play(); freeButton.transform.DOMove(freeDestination, animeDuration, true).SetEase(Ease.OutCirc).Play(); MaximizeMaskObj(); } private void OnMaskPointerExit() { // dotween move button batck to original position mixButton.transform.DOMove(mixOriginDestination, animeDuration, true).SetEase(Ease.OutCirc).Play(); attackButton.transform.DOMove(attackOriginDestination, animeDuration, true).SetEase(Ease.OutCirc).Play(); gotoButton.transform.DOMove(gotoOriginDestination, animeDuration, true).SetEase(Ease.OutCirc).Play(); freeButton.transform.DOMove(freeOriginDestination, animeDuration, true).SetEase(Ease.OutCirc).Play(); MinimizeMaskObj(); } private void MinimizeMaskObj() { // minimize mask object use dotween doscale maskObj.transform.DOScaleX(maskScaleX, animeDuration).SetEase(Ease.OutCirc).Play(); maskObj.transform.DOScaleY(maskScaleY, animeDuration).SetEase(Ease.OutCirc).Play(); } private void MaximizeMaskObj() { // maximize mask object use dotween doscale maskObj.transform.DOScaleX(1, animeDuration).SetEase(Ease.OutCirc).Play(); maskObj.transform.DOScaleY(1, animeDuration).SetEase(Ease.OutCirc).Play(); } }