mirror of
https://github.com/Alex-Rachel/TEngine.git
synced 2025-08-07 16:45:10 +00:00
适应屏幕全屏拉伸
适应屏幕全屏拉伸
This commit is contained in:
18
Assets/TEngine/Runtime/UI/Extend/UIBackgroundImageStretch.cs
Normal file
18
Assets/TEngine/Runtime/UI/Extend/UIBackgroundImageStretch.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace TEngine
|
||||
{
|
||||
/// <summary>
|
||||
/// 背景图片等比拉伸
|
||||
/// </summary>
|
||||
public class UIBackgroundImageStretch : MonoBehaviour
|
||||
{
|
||||
public bool m_noClip;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
var imageRect = GetComponent<RectTransform>();
|
||||
UIStretchUtil.Instance.DoStretch(imageRect, m_noClip);
|
||||
}
|
||||
}
|
||||
}
|
77
Assets/TEngine/Runtime/UI/Extend/UIStretchUtil.cs
Normal file
77
Assets/TEngine/Runtime/UI/Extend/UIStretchUtil.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace TEngine
|
||||
{
|
||||
public class UIStretchUtil : TSingleton<UIStretchUtil>
|
||||
{
|
||||
private bool m_isInit;
|
||||
private Vector2 m_canvasSize;
|
||||
private float m_screenAspect;
|
||||
|
||||
public bool Init()
|
||||
{
|
||||
var goRoot = GameObject.Find("UIRoot/Canvas");
|
||||
if (goRoot == null)
|
||||
{
|
||||
TLogger.LogError("找不到 goRoot");
|
||||
return false;
|
||||
}
|
||||
var canvasScaler = goRoot.GetComponent<CanvasScaler>();
|
||||
if (canvasScaler == null)
|
||||
{
|
||||
TLogger.LogError("找不到 CanvasScaler");
|
||||
return false;
|
||||
}
|
||||
|
||||
m_screenAspect = Screen.width / (float)Screen.height;
|
||||
float designScale = canvasScaler.referenceResolution.x / canvasScaler.referenceResolution.y;
|
||||
if (m_screenAspect > designScale)
|
||||
{
|
||||
//Match 以 Height 为标准
|
||||
m_canvasSize.y = canvasScaler.referenceResolution.y;
|
||||
m_canvasSize.x = m_canvasSize.y * Screen.width / Screen.height;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Match 以 Weight 为标准
|
||||
m_canvasSize.x = canvasScaler.referenceResolution.x;
|
||||
m_canvasSize.y = m_canvasSize.x * Screen.height / Screen.width;
|
||||
}
|
||||
//BLogger.Error("referenceResolution = "+ canvasScaler.referenceResolution);
|
||||
//BLogger.Error("m_canvasSize = " + m_canvasSize);
|
||||
|
||||
m_isInit = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void DoStretch(RectTransform rectTransform, bool noClip)
|
||||
{
|
||||
if (!m_isInit)
|
||||
{
|
||||
if (!Init())
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (rectTransform != null && rectTransform.sizeDelta.x > 0 && rectTransform.sizeDelta.y > 0)
|
||||
{
|
||||
Vector2 rectSize = rectTransform.sizeDelta;
|
||||
var rectAspect = rectSize.x / rectSize.y;
|
||||
if (!noClip && rectAspect > m_screenAspect ||
|
||||
noClip && rectAspect < m_screenAspect)
|
||||
{
|
||||
//以高为标准
|
||||
float scale = m_canvasSize.y / rectSize.y;
|
||||
rectTransform.localScale = new Vector3(scale, scale, 1f);
|
||||
}
|
||||
else
|
||||
{
|
||||
//以宽为标准
|
||||
float scale = m_canvasSize.x / rectSize.x;
|
||||
rectTransform.localScale = new Vector3(scale, scale, 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user