Unity Udexreal开发插件包
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.1 KiB

/*
UniGif
Copyright (c) 2015 WestHillApps (Hironari Nishioka)
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
*/
using UnityEngine;
[ExecuteInEditMode]
public class UniGifImageAspectController : MonoBehaviour
{
public int m_originalWidth;
public int m_originalHeight;
public bool m_fixOnUpdate;
private Vector2 m_lastSize = Vector2.zero;
private Vector2 m_newSize = Vector2.zero;
private RectTransform m_rectTransform;
public RectTransform rectTransform
{
get
{
return m_rectTransform != null ? m_rectTransform : (m_rectTransform = GetComponent<RectTransform>());
}
}
private void Update()
{
#if UNITY_EDITOR
if (Application.isPlaying == false)
{
FixAspectRatio();
return;
}
#endif
if (m_fixOnUpdate)
{
FixAspectRatio();
}
}
public void FixAspectRatio(int originalWidth = -1, int originalHeight = -1)
{
bool forceUpdate = false;
if (originalWidth > 0 && originalHeight > 0)
{
m_originalWidth = originalWidth;
m_originalHeight = originalHeight;
forceUpdate = true;
}
if (m_originalWidth <= 0 || m_originalHeight <= 0)
{
return;
}
bool changeX;
if (forceUpdate || m_lastSize.x != rectTransform.sizeDelta.x)
{
changeX = true;
}
else if (m_lastSize.y != rectTransform.sizeDelta.y)
{
changeX = false;
}
else
{
return;
}
if (changeX)
{
float ratio = rectTransform.sizeDelta.x / m_originalWidth;
m_newSize.Set(rectTransform.sizeDelta.x, m_originalHeight * ratio);
}
else
{
float ratio = rectTransform.sizeDelta.y / m_originalHeight;
m_newSize.Set(m_originalWidth * ratio, rectTransform.sizeDelta.y);
}
rectTransform.sizeDelta = m_newSize;
m_lastSize = rectTransform.sizeDelta;
}
}