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

自定义含RawImage的Prefab实例化后显示在屏幕中心,如何修正位置?

解决带RawImage的Prefab实例化后固定在屏幕中心的问题

问题核心是UI组件(RawImage属于UI)的渲染逻辑和普通3D物体完全不同:

  • 球体、圆柱体这类3D预制体直接在世界空间渲染,设置父物体、世界位置、旋转都会生效;
  • 带RawImage的Prefab依赖Canvas渲染,默认Canvas的Screen Space - Overlay模式会让UI脱离世界空间,完全基于屏幕坐标布局,和你设置的父物体、世界位置无关。

直接有效的解决方案:将Canvas改为世界空间模式

  1. 选中带RawImage的Prefab里的Canvas,在Inspector面板找到Canvas组件
  2. 把Render Mode从默认的Screen Space - Overlay改成World Space
  3. 调整Canvas的RectTransform参数:
    • 把Width和Height改成合适的尺寸(比如100x100,按需调整)
    • 确保Anchor Presets和Pivot设置为(0.5,0.5)(让UI中心对齐你设置的位置)

代码优化细节

Canvas改为World Space后,现有代码就能正常工作,可调整顺序避免坐标转换问题:

GameObject obj = Instantiate(ArPrefab);
obj.transform.SetParent(face.transform, false); // 第二个参数设为false,避免父物体缩放影响UI
obj.transform.localPosition = face.vertices[8] - face.transform.position; // 直接使用局部位置
obj.transform.localRotation = Quaternion.identity; // 继承父物体旋转的话,设为identity即可
obj.SetActive(true);

为什么调整Canvas排序顺序没用?

Canvas的Sort Order只控制UI的显示层级(谁在谁上方),和UI的位置完全无关,所以改这个无法解决位置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:07:06