123 lines
3.9 KiB
C#
123 lines
3.9 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace UIWidgets
|
|
{
|
|
public static class Animations
|
|
{
|
|
public static IEnumerator Rotate(RectTransform rectTransform, float time = 0.5f, float start_angle = 0f, float end_angle = 90f)
|
|
{
|
|
if (rectTransform != null)
|
|
{
|
|
Vector3 start_rotarion = rectTransform.rotation.eulerAngles;
|
|
float end_time = Time.time + time;
|
|
while (Time.time <= end_time)
|
|
{
|
|
float rotation_x = Mathf.Lerp(start_angle, end_angle, 1f - (end_time - Time.time) / time);
|
|
rectTransform.rotation = Quaternion.Euler(rotation_x, start_rotarion.y, start_rotarion.z);
|
|
yield return null;
|
|
}
|
|
rectTransform.rotation = Quaternion.Euler(start_rotarion);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator RotateZ(RectTransform rectTransform, float time = 0.5f, float start_angle = 0f, float end_angle = 90f)
|
|
{
|
|
if (rectTransform != null)
|
|
{
|
|
Vector3 start_rotarion = rectTransform.rotation.eulerAngles;
|
|
float end_time = Time.time + time;
|
|
while (Time.time <= end_time)
|
|
{
|
|
rectTransform.rotation = Quaternion.Euler(z: Mathf.Lerp(start_angle, end_angle, 1f - (end_time - Time.time) / time), x: start_rotarion.x, y: start_rotarion.y);
|
|
yield return null;
|
|
}
|
|
rectTransform.rotation = Quaternion.Euler(start_rotarion);
|
|
}
|
|
}
|
|
|
|
public static IEnumerator Collapse(RectTransform rectTransform, float time = 0.5f, bool isHorizontal = false)
|
|
{
|
|
if (!(rectTransform != null))
|
|
{
|
|
yield break;
|
|
}
|
|
Vector2 size = rectTransform.rect.size;
|
|
LayoutElement layoutElement = rectTransform.GetComponent<LayoutElement>() ?? rectTransform.gameObject.AddComponent<LayoutElement>();
|
|
if (size.x == 0f || size.y == 0f)
|
|
{
|
|
size = new Vector2(layoutElement.preferredWidth, layoutElement.preferredHeight);
|
|
}
|
|
float end_time = Time.time + time;
|
|
while (Time.time <= end_time)
|
|
{
|
|
if (isHorizontal)
|
|
{
|
|
float num = Mathf.Lerp(size.x, 0f, 1f - (end_time - Time.time) / time);
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, num);
|
|
layoutElement.preferredWidth = num;
|
|
}
|
|
else
|
|
{
|
|
float num2 = Mathf.Lerp(size.y, 0f, 1f - (end_time - Time.time) / time);
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, num2);
|
|
layoutElement.preferredHeight = num2;
|
|
}
|
|
yield return null;
|
|
}
|
|
if (isHorizontal)
|
|
{
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x);
|
|
layoutElement.preferredWidth = size.x;
|
|
}
|
|
else
|
|
{
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);
|
|
layoutElement.preferredHeight = size.y;
|
|
}
|
|
}
|
|
|
|
public static IEnumerator Open(RectTransform rectTransform, float time = 0.5f, bool isHorizontal = false)
|
|
{
|
|
if (!(rectTransform != null))
|
|
{
|
|
yield break;
|
|
}
|
|
Vector2 size = rectTransform.rect.size;
|
|
LayoutElement layoutElement = rectTransform.GetComponent<LayoutElement>() ?? rectTransform.gameObject.AddComponent<LayoutElement>();
|
|
if (size.x == 0f || size.y == 0f)
|
|
{
|
|
size = new Vector2(layoutElement.preferredWidth, layoutElement.preferredHeight);
|
|
}
|
|
float end_time = Time.time + time;
|
|
while (Time.time <= end_time)
|
|
{
|
|
if (isHorizontal)
|
|
{
|
|
float num = Mathf.Lerp(0f, size.x, 1f - (end_time - Time.time) / time);
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, num);
|
|
layoutElement.preferredWidth = num;
|
|
}
|
|
else
|
|
{
|
|
float num2 = Mathf.Lerp(0f, size.y, 1f - (end_time - Time.time) / time);
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, num2);
|
|
layoutElement.preferredHeight = num2;
|
|
}
|
|
yield return null;
|
|
}
|
|
if (isHorizontal)
|
|
{
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size.x);
|
|
layoutElement.preferredWidth = size.x;
|
|
}
|
|
else
|
|
{
|
|
rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size.y);
|
|
layoutElement.preferredHeight = size.y;
|
|
}
|
|
}
|
|
}
|
|
}
|