Init
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace QFSW.QC.UI
|
||||
{
|
||||
[ExecuteInEditMode]
|
||||
public class DynamicCanvasScaler : MonoBehaviour
|
||||
{
|
||||
public float RectMagnification
|
||||
{
|
||||
get => _rectMagnification;
|
||||
set
|
||||
{
|
||||
if (value > 0)
|
||||
{
|
||||
_rectMagnification = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
[Range(0.5f, 2f)]
|
||||
[SerializeField] private float _rectMagnification = 1f;
|
||||
|
||||
public float ZoomMagnification
|
||||
{
|
||||
get => _zoomMagnification;
|
||||
set
|
||||
{
|
||||
if (value > 0)
|
||||
{
|
||||
_zoomMagnification = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
[Range(0.5f, 2f)]
|
||||
[SerializeField] private float _zoomMagnification = 1f;
|
||||
|
||||
[SerializeField] private CanvasScaler _scaler = null;
|
||||
[SerializeField] private RectTransform _uiRoot = null;
|
||||
[SerializeField] private Vector2 _referenceResolution = new Vector2(1920, 1080);
|
||||
|
||||
private float RootScaler => _rectMagnification / _zoomMagnification;
|
||||
|
||||
private float _lastScaler;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
_lastScaler = RootScaler;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (_scaler && _uiRoot)
|
||||
{
|
||||
if (RootScaler != _lastScaler)
|
||||
{
|
||||
Rect rootRect = new Rect(_uiRoot.offsetMin.x / _lastScaler, _uiRoot.offsetMin.y / _lastScaler, _uiRoot.offsetMax.x / _lastScaler, _uiRoot.offsetMax.y / _lastScaler);
|
||||
_lastScaler = RootScaler;
|
||||
|
||||
_scaler.referenceResolution = _referenceResolution / _zoomMagnification;
|
||||
_uiRoot.offsetMin = new Vector2(rootRect.x, rootRect.y) * RootScaler;
|
||||
_uiRoot.offsetMax = new Vector2(rootRect.width, rootRect.height) * RootScaler;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
UnityEditor.EditorUtility.SetDirty(_uiRoot);
|
||||
UnityEditor.EditorUtility.SetDirty(_scaler);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user