在网上找了很久,没有发现比较有效的办法来解决这个问题,目前也没有发现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参数。
然后就可以使用啦