Unity 屏幕适配器

可以适配的对象包含: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
        */
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值