unity 根据图片比例适应

  void Dofit()
    {

        Transform canvasObj = GameObject.Find("Canvas").transform;
        float width = canvasObj.GetComponent<RectTransform>().sizeDelta.x;
        float height = 1;

        if (GetComponent<RawImage>())
        {
            Texture tex = GetComponent<RawImage>().texture;

            float tw = tex.width;
            float th = tex.height;
            //图片宽高比例 
            float xyper = tw / th;
             height = width / xyper; //根据宽度计算高度
        

        }
        else
        {
           Sprite sp= GetComponent<Image>().sprite;
 
           float xyper = sp.rect.size.x / sp.rect.size.y;
           height = width / xyper; //根据宽度计算高度

        }

        GetComponent<RectTransform>().sizeDelta = new Vector2(width, height);
    }

### 解决Unity图片拉伸问题 在Unity中遇到图片拉伸问题通常是由于精灵(Sprite)的设置不当或是UI元素尺寸与分辨率适配不佳所引起的。为了有效防止或修正这一现象,可以从以下几个方面着手: #### 调整 Sprite Mode 和 Pivot 设置 对于导入到项目中的图像资源,在Inspector面板下找到Texture Type选项并将其设为Sprite (2D and UI),这一步骤确保了该图像是作为精灵处理而不是普通的纹理[^1]。 接着切换至Sprite Mode属性,如果目标是单张独立的小图标,则保持Single不变;而对于包含多个子图的大图集而言,应改为Multiple以便后续切割操作。此时点击Apply按钮应用更改后可进一步通过Sprite Editor来进行精确分割。 另外需要注意的是Pivot参数的选择也会影响显示效果,适当调整pivot位置有助于改善某些情况下可能出现的画面变形情况。 #### 使用正确的采样过滤方式 当发现缩放后的图片存在模糊不清或者边缘锯齿明显等问题时,应当核查项目的Quality Settings里关于Anisotropic Textures以及Anti Aliasing的相关配置项是否合理设定。同时也要确认具体材质球上的Filter Mode被指定成Bilinear/Bicubic而非Point模式来获得更平滑自然的结果呈现。 #### 正确利用Canvas Scaler组件优化布局适应不同屏幕比例 针对UI场景下的图片失真状况,建议给Canvas挂载上Canvas Scaler脚本,并依据实际需求挑选合适的Scale Mode策略——Constant Pixel Size适用于固定像素大小控件;Match Width or Height则能较好地兼顾宽高比匹配度;而Wrap Content则是动态计算所需空间从而实现自适应排版的效果。 ```csharp using UnityEngine; using UnityEngine.UI; public class FixImageStretch : MonoBehaviour { private void Start() { // 获取 CanvasScaler 组件实例 CanvasScaler scaler = GetComponent<CanvasScaler>(); // 设定 Scale Mode 为 Match Width Or Height 并给予恰当权重值 scaler.uiScaleMode = CanvasScaler.ScaleMode.MatchWidthOrHeight; scaler.matchWidthOrHeight = 0.5f; // 可根据实际情况微调此数值 // 对于特定 Image 组件单独调整其 Rect Transform 的锚点和轴心偏移量 RectTransform rectTransform = transform.GetComponent<RectTransform>(); Vector2 anchorMin = new Vector2(0.5f, 0.5f); Vector2 anchorMax = new Vector2(0.5f, 0.5f); Vector2 pivot = new Vector2(0.5f, 0.5f); rectTransform.anchorMin = anchorMin; rectTransform.anchorMax = anchorMax; rectTransform.pivot = pivot; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值