在 GameObject 上显示 Canvas 但方向不正确

Displaying a Canvas over a GameObject but it's not orienting properly

我正在尝试在 Unity 2020.3.26 中的游戏对象上显示一些粒子和滑块(如健康栏),但即使在场景中它也像我想要的那样显示,在播放时,canvas 似乎将自己定位“太多”,我不知道如何做到这一点,所以粒子和滑块都保持在原位。

如图所示,我在游戏对象“Aimable Target Body”中放置了一个 canvas,当我查看对象的中心时,它会如我所愿地工作。 但是如果我开始看别处,而不是保持居中,UI 会稍微远离(不要介意中间的蓝色大魔法圈,它应该在那里)。

我认为我的 Canvas 设置没有问题(我做到了,所以它总是面向相机)但我看不出还有什么地方可能出错...

提前感谢您的回答!

Game Objects

Scene View

Correct UI

Wrong UI

Canvas Settings

主要原因是目标存在于世界中,而滑块存在于canvas上。这两个元素有不同的坐标系,如果你想让 Circle+Slider 的中心在 Sphere 的中心,你必须将一组坐标投影到另一组坐标(World to Screen)。

这可以在相机上使用 WorldToScreenPoint 方法来完成。

基本上,UI 元素(存在于 Canvas 上)必须在 Update 函数中检查世界球体的 transform.position,并设置它们使用 _mainCamera.WorldToScreenPoint(sphereTransform.position)

的位置