using DG.Tweening; using UnityEngine; public class StartMenuAnimations : MonoBehaviour { [SerializeField] private GameObject maskObj; [SerializeField] private GameObject mixButton; [SerializeField] private GameObject attackButton; [SerializeField] private GameObject gotoButton; [SerializeField] private GameObject freeButton; [Header("Animation Parameter")] [SerializeField] private float animeDuration = 0.2f; [SerializeField] private float animeMoveXDistance = 20f; [SerializeField] private float animeMoveYDistance = 20f; [SerializeField] private float animeScaleX = 1.2f; [SerializeField] private float animeScaleY = 1.2f; [SerializeField] private float maskScaleX = 1; [SerializeField] private float maskScaleY = 0.4f; private Vector3 mixOriginDestination; private Vector3 attackOriginDestination; private Vector3 gotoOriginDestination; private Vector3 freeOriginDestination; private Vector3 mixDestination; private Vector3 attackDestination; private Vector3 gotoDestination; private Vector3 freeDestination; private Vector3 originalCanvas; private PolygonCollider2D parallelogramPolygon; private bool isMouseOverMask = false; private void Start() { originalCanvas = transform.parent.position; // 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.position + new Vector3(animeScaleX * animeMoveXDistance, animeScaleY * animeMoveYDistance, 0); attackDestination = attackButton.transform.position + new Vector3(animeMoveXDistance, animeMoveYDistance, 0); gotoDestination = gotoButton.transform.position - new Vector3(animeMoveXDistance, animeMoveYDistance, 0); freeDestination = freeButton.transform.position - new Vector3(animeScaleX * animeMoveXDistance, animeScaleY * animeMoveYDistance, 0); //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(fixCanvas(mixDestination), animeDuration, true).SetEase(Ease.OutCirc).Play(); attackButton.transform.DOMove(fixCanvas(attackDestination), animeDuration, true).SetEase(Ease.OutCirc).Play(); gotoButton.transform.DOMove(fixCanvas(gotoDestination), animeDuration, true).SetEase(Ease.OutCirc).Play(); freeButton.transform.DOMove(fixCanvas(freeDestination), animeDuration, true).SetEase(Ease.OutCirc).Play(); MaximizeMaskObj(); } private void OnMaskPointerExit() { // dotween move button batck to original position mixButton.transform.DOMove(fixCanvas(mixOriginDestination), animeDuration, true).SetEase(Ease.OutCirc).Play(); attackButton.transform.DOMove(fixCanvas(attackOriginDestination), animeDuration, true).SetEase(Ease.OutCirc).Play(); gotoButton.transform.DOMove(fixCanvas(gotoOriginDestination), animeDuration, true).SetEase(Ease.OutCirc).Play(); freeButton.transform.DOMove(fixCanvas(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(); } private Vector3 fixCanvas(Vector3 vector) { // fix position of button while canvas is changed return vector.FixCanvas(originalCanvas, transform.parent.position); } }