如何在Unity中创建一个窗口大小改变的回调

文章介绍了一种在Unity中使用UGUI的Rect组件和OnRectTransformDimensionsChange回调函数,实现在窗口尺寸改变时执行特定操作的方法,适用于需要实时监控屏幕尺寸的应用场景。
摘要由CSDN通过智能技术生成

在网上找了很久,没有发现比较有效的办法来解决这个问题,目前也没有发现Unity提供了窗口尺寸被修改后的回调或者时间。

偶然发现了UGUI的rect组件有一个回调,OnRectTransformDimensionsChange(),突然想到,让UGUI覆盖摄像机平面,然后监视Rect的变化好像也能实现差不多的效果。

using UnityEngine;

public class WindowResize : MonoBehaviour
{
    [Header("预设值")]
    [Tooltip("用于设定多次屏幕大小切换的冷却时间")]
    [Range(0, 1f)]
    public float resizeTimeOut = 0.5f;

    [Header("组件")]
    [Tooltip("这里当然是放组件咯")]
    public Rigidbody rb;  //以rb为例    

    private float lastResizeTime = 0f;

    private void Awake()
    {
        lastResizeTime = Time.time;

        //下面就自己获取组件就行了
        if (tpsCtrl == null)
        {
            GameObject.FindGameObjectWithTag("Player").
                GetComponent<Rigidbody>();
            Debug.LogWarning($"你还没有设置{this.name}的组件实例");
        }

    }


    private void OnRectTransformDimensionsChange()
    {
        if (Time.time - lastResizeTime >= resizeTimeOut)
        {
            //参数设置
            lastResizeTime = Time.time;

            //回调方法
            //TODO:这里写你的方法内容就可以了
            
            //打印日志
            Debug.Log($"屏幕尺寸更新为{Screen.width}*{Screen.height}");
        }
        else
        {
            Debug.LogWarning("屏幕Resize频率过高,请稍后重试!!!");
        }
    }
}

一劳永逸,直接写了一个WindowResize的脚本,需要的自取吧。

使用方法大概就:

1.创建一个Canvas,让这个Canvas有Rect Transform组件就行,然后渲染模式调成覆盖屏幕空间

2.脚本组件加上去,记得设置Timeout参数

然后就可以使用啦

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FurryMonster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值