private IEnumerator MoveCenterSelectItemImmediately(RotationMenuItem item) { float nowAngle = transform.rotation.eulerAngles.z; float goalAngle = (float)item.Index * BetweenItem2ItemAngle; Debug.Log(nowAngle + " / " + goalAngle); int diffIndex = Mathf.Abs(CenterItem.Index - item.Index) < menuItemCount * 0.5f ? Mathf.Abs(CenterItem.Index - item.Index) : CenterItem.Index < item.Index ? (CenterItem.Index + menuItemCount) - item.Index : Mathf.Abs(CenterItem.Index - (item.Index + menuItemCount)); Debug.Log(diffIndex); float timer = 0; Quaternion startRotation = transform.rotation; Quaternion endRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, goalAngle); while (timer <= 1f) { yield return(null); timer += (Time.deltaTime * 5f) / diffIndex; transform.rotation = Quaternion.Lerp(startRotation, endRotation, timer); leftAngle = transform.rotation.eulerAngles.z / BetweenItem2ItemAngle; this.goalAngle = Mathf.RoundToInt(leftAngle); } isImmediatelyMove = false; }
public void SetCenterItemImmediately(RotationMenuItem item) { if (isImmediatelyMove) { return; } isImmediatelyMove = true; StartCoroutine(MoveCenterSelectItemImmediately(item)); }
public void SetCenterItem(RotationMenuItem item) { PrevCenterItem = CenterItem; CenterItem = item; }