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

Unity世界空间转画布空间异常:伤害弹窗随相机上下偏移

解决Unity伤害弹窗上下偏移的问题

针对你遇到的Screen Space - Overlay画布下,伤害弹窗随相机上下移动偏移、无法对齐目标的问题,直接给你可行的解决方法:

1. 替换坐标转换逻辑

你的代码通过Viewport坐标转屏幕坐标的方式容易因画布缩放、锚点设置出错,直接用Camera.WorldToScreenPoint一步获取屏幕像素坐标,更适配Overlay模式:

void UpdateDamagePopupPosition()
{
    // 直接将世界空间命中点转为屏幕像素坐标
    Vector2 screenPosition = cam.WorldToScreenPoint(position);
    // 给弹窗的RectTransform设置锚定位置
    myRectTransform.anchoredPosition = screenPosition;
}

2. 修正弹窗的RectTransform锚点

选中伤害弹窗UI对象,在Inspector面板的RectTransform组件中,把**锚点(Anchor Min/Max)**都设为(0, 0)(屏幕左下角对齐)。这样anchoredPosition的坐标会完全匹配WorldToScreenPoint输出的基于左下角的像素位置,避免偏移。

3. 调整位置更新的时机

不要在OnGUI()里调用位置更新——OnGUI是IMGUI的渲染周期,和UGUI的更新时机不匹配,容易导致延迟或错位。把更新方法放到LateUpdate()中执行,它会在相机和所有场景物体移动完成后运行,确保弹窗位置是最新的:

void LateUpdate()
{
    UpdateDamagePopupPosition();
}

额外检查项

  • 确认cam变量绑定的是当前渲染场景的主相机(可以直接用Camera.main,但打包前记得给主相机添加MainCamera标签)
  • 确保弹窗的父物体就是Canvas,没有额外的嵌套缩放或位移影响坐标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:57:09