66 lines
1.7 KiB
C#
66 lines
1.7 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
namespace BITKit.UX
|
||
{
|
||
|
||
/// <summary>
|
||
/// Created by Vitens on 2020/12/11 20:48:35
|
||
///
|
||
/// Description :
|
||
/// 全屏背景图片等比例拉伸自适应
|
||
/// </summary>
|
||
[ExecuteInEditMode]
|
||
public class UGUIBackgroundImageScaler : MonoBehaviour
|
||
{
|
||
//图片原大小(压缩前的)
|
||
[SerializeField] private Vector2 textureOriginSize = new Vector2(2048, 1024);
|
||
|
||
// Start is called before the first frame update
|
||
private void Start()
|
||
{
|
||
Scaler();
|
||
}
|
||
|
||
//适配
|
||
private void Scaler()
|
||
{
|
||
//当前画布尺寸
|
||
Vector2 canvasSize = gameObject.GetComponentInParent<Canvas>().GetComponent<RectTransform>().sizeDelta;
|
||
//当前画布尺寸长宽比
|
||
float screenxyRate = canvasSize.x / canvasSize.y;
|
||
|
||
//图片尺寸 这个得到的结果是 (0,0) ?
|
||
//Vector2 bgSize = bg.mainTexture.texelSize;
|
||
Vector2 bgSize = textureOriginSize;
|
||
//视频尺寸长宽比
|
||
float texturexyRate = bgSize.x / bgSize.y;
|
||
|
||
RectTransform rt = (RectTransform)transform;
|
||
//视频x偏长,需要适配y(下面的判断 '>' 改为 '<' 就是视频播放器的视频方式)
|
||
if (texturexyRate > screenxyRate)
|
||
{
|
||
int newSizeY = Mathf.CeilToInt(canvasSize.y);
|
||
int newSizeX = Mathf.CeilToInt((float)newSizeY / bgSize.y * bgSize.x);
|
||
rt.sizeDelta = new Vector2(newSizeX, newSizeY);
|
||
}
|
||
else
|
||
{
|
||
int newVideoSizeX = Mathf.CeilToInt(canvasSize.x);
|
||
int newVideoSizeY = Mathf.CeilToInt((float)newVideoSizeX / bgSize.x * bgSize.y);
|
||
rt.sizeDelta = new Vector2(newVideoSizeX, newVideoSizeY);
|
||
}
|
||
}
|
||
|
||
private void Update()
|
||
{
|
||
#if UNITY_EDITOR
|
||
//editor模式下测试用
|
||
Scaler();
|
||
#endif
|
||
}
|
||
|
||
}
|
||
} |