using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class MultipleRoller : MonoBehaviour { public Action DelRolling; [SerializeField] RectTransform mRctNeedle; [SerializeField] Vector2 mRollArea; [SerializeField] Vector2 m3XArea; [SerializeField] Vector2 m2XArea; [SerializeField] Vector2 m1_5XArea; [SerializeField] float mRollSpeed = 600; public bool IsRolling = false; private float mMultiple = 1; private int mRollDir = 1; private Vector3 mNextPos; private void Update() { if (IsRolling) { mNextPos = mRctNeedle.localPosition + (Vector3.right * mRollDir * mRollSpeed * Time.deltaTime); if (mNextPos.x >= mRollArea.y) { mNextPos.x = mRollArea.y; mRollDir = -1; } else if (mNextPos.x <= mRollArea.x) { mNextPos.x = mRollArea.x; mRollDir = 1; } mRctNeedle.localPosition = mNextPos; SetMultiple(); } } private void SetMultiple() { float tX = Mathf.Abs(mRctNeedle.localPosition.x); if (IsInArea(tX, m3XArea)) { mMultiple = 3; } else if (IsInArea(tX, m2XArea)) { mMultiple = 2; } else if (IsInArea(tX, m1_5XArea)) { mMultiple = 1.5f; } else { mMultiple = 1; } DelRolling?.Invoke(mMultiple); } private bool IsInArea(float pVal, Vector2 pArea)//val and area is positive { if (pVal >= pArea.x && pVal < pArea.y) { return true; } return false; } }