对比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; } }