예제 #1
0
    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;
    }
예제 #2
0
 public void SetCenterItemImmediately(RotationMenuItem item)
 {
     if (isImmediatelyMove)
     {
         return;
     }
     isImmediatelyMove = true;
     StartCoroutine(MoveCenterSelectItemImmediately(item));
 }
예제 #3
0
 public void SetCenterItem(RotationMenuItem item)
 {
     PrevCenterItem = CenterItem;
     CenterItem     = item;
 }