You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义与模型对象尺寸相对恒定的Sprite?

让Sprite尺寸与模型对象相对恒定的方法
  • 基于模型世界空间尺寸动态计算Sprite大小
    先获取模型的世界空间包围盒(比如通过渲染组件的bounds属性),拿到模型当前的实际尺寸后,按固定比例设置Sprite的大小。模型缩放后,包围盒尺寸会同步变化,用这个尺寸调整Sprite,就能保证两者比例始终一致。
    示例代码(以Unity为例):

    // 获取模型渲染组件的包围盒
    Bounds modelBounds = GetComponent<Renderer>().bounds;
    // 取模型宽度作为参考,设置Sprite为模型宽度的0.4倍
    float targetSpriteSize = modelBounds.size.x * 0.4f;
    spriteTransform.localScale = new Vector3(targetSpriteSize, targetSpriteSize, 1f);
    

    如果模型是多子物体组合,要确保获取的是整个模型的整体包围盒,避免尺寸计算偏差。

  • 结合相机投影参数适配

    • 正交相机场景:把Sprite大小和相机的正交尺寸绑定,同时结合模型到相机的距离与缩放比例。正交相机的正交尺寸决定了屏幕显示范围,根据模型在视口中的实际占比调整Sprite,就能保持相对大小。
    • 透视相机场景:通过透视公式计算Sprite的缩放值,结合模型到相机的距离、模型当前缩放比例以及相机的视场角,确保在相机视角下,Sprite和模型的比例恒定。
      透视相机下的示例代码:
    float distanceToCam = Vector3.Distance(modelTransform.position, Camera.main.transform.position);
    // 模型未缩放时的原始尺寸
    float originalModelSize = 1.5f;
    // 模型当前的实际尺寸
    float currentModelSize = originalModelSize * modelTransform.localScale.x;
    // 透视下的Sprite缩放计算
    float spriteScale = (currentModelSize * Camera.main.fieldOfView) / (distanceToCam * Mathf.Tan(Mathf.Deg2Rad * Camera.main.fieldOfView / 2f));
    spriteTransform.localScale = Vector3.one * spriteScale;
    
  • 将Sprite设为模型子物体用相对缩放
    把Sprite的Transform直接设为模型Transform的子物体,给Sprite设置固定的局部缩放比例。这样模型缩放时,Sprite会继承父物体的缩放属性,自然和模型保持相对恒定的尺寸。需要注意调整Sprite的锚点和相对位置,避免缩放时出现位置偏移。

内容的提问来源于stack exchange,提问作者Kaveh Mirzaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:28:18