对比Z轴对当前所在的Layer的Z偏移,计算出缩放值,对位置和大小进行偏移
public float GetKeep2DShowAt3DCameraRatio(UILayerNames name, float elementWorldZ)
{
var camera = GetCameraByLayer(name);
if (camera.orthographic)
{
return 1.0f;
}
var layer = GetLayer(name);
return elementWorldZ / layer.transform.position.z;
}using Frame.Runtime;
using Frame.Runtime.UI;
using UnityEngine;
public class Adapt3DCameraTo2DViewScaleAndPos : UIMonoViewComponent
{
private Vector3 __OriginScale;
private Vector3 __OriginPosition;
public override void OnCreated()
{
__OriginScale = rectTransform.localScale;
__OriginPosition = rectTransform.position;
if (rectTransform.localPosition.z == 0)
{
return;
}
var ratio = Game.UI.GetKeep2DShowAt3DCameraRatio(LayerName, __OriginPosition.z);
//缩放
rectTransform.localScale = __OriginScale * ratio;
//位移
var newPos = __OriginPosition;
newPos.y *= ratio;
newPos.x *= ratio;
rectTransform.position = newPos;
}
public override void Dispose()
{
base.Dispose();
if (rectTransform.localPosition.z == 0)
{
return;
}
rectTransform.localScale = __OriginScale;
rectTransform.position = __OriginPosition;
}
}