2DUI相机换3D相机,保持和2D显示一致

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



首页 我的博客
粤ICP备17103704号