/* 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()); } } 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; } }