可以适配的对象包含:SpriteRender,Image,RawImage
[RequireComponent(typeof(Camera))]
public class UScreenAdapter : MonoBehaviour
{
[System.Serializable]
public class SpriteInfo
{
public SpriteRenderer Value = null;
public EFillModel Model = EFillModel.ShowAll;
}
[System.Serializable]
public class ImageInfo
{
public Image Value = null;
public EFillModel Model = EFillModel.ShowAll;
}
[System.Serializable]
public class RawImageInfo
{
public RawImage Value = null;
public EFillModel Model = EFillModel.ShowAll;
}
public enum EFillModel
{
/// <summary>
/// 显示图片的所有内容
/// </summary>
ShowAll,
/// <summary>
/// 使图片内容填满屏幕
/// </summary>
Full,
/// <summary>
/// 根据图片高度填充屏幕
/// </summary>
WithHeight,
/// <summary>
/// 根据图片宽度填充屏幕
/// </summary>
WithWidth
}
public enum EUpdateType
{
/// <summary>
/// 只在唤醒时更新一次
/// </summary>
UpdateOnAwake,
/// <summary>
/// 再每次视口发生变化的时候更新一次
/// </summary>
UpdateOnViewportChanged
}
public EUpdateType TickType = EUpdateType.UpdateOnAwake;
#region 提供场景静态元素使用
public SpriteInfo[] SpriteRenders;
public ImageInfo[] Images;
public RawImageInfo[] RawImages;
#endregion
#region 提供持续消费的用户使用
List<SpriteInfo> DynamicSpriteRenders;
List<ImageInfo> DynamicImages;
List<RawImageInfo> DynamicRawImages;
#endregion
#region 提供给一次性消费的用户使用
SpriteInfo ConstSpriteInfo = new SpriteInfo();
ImageInfo ConstImageInfo = new ImageInfo();
RawImageInfo ConstRawImageInfo = new RawImageInfo();
#endregion
Camera Viewport;
float ScreenRatio;
protected void Awake()
{
Viewport = GetComponent<Camera>();
UpdateAll();
}
protected void LateUpdate()
{
if (TickType != EUpdateType.UpdateOnViewportChanged) return;
if (ScreenRatio != Viewport.aspect)
{
UpdateAll();
}
}
#region 动态注入的适配对象接口集服务于持续消费的元素
/* 如果你需要适配的元素,是动态的并且需要随着视口的变化而变化,那么
* 可以使用这三组API,通过Register想适配器注册一个适配对象,当适配对象
* 销毁前,调用Unregister注销即可,其次你需要选用UpdateOnViewportChanged
*/