我有一把射击光线投射的枪,当光线投射击中敌人时,我想生成一个显示数字的伤害弹出框。我有一个代码,从世界空间转换到画布空间。在这种情况下,世界空间是光线投射命中点的位置,而画布空间应该是伤害弹出文本的位置。
代码如下:
void positionSelf()
{
Vector2 ViewportPosition = cam.WorldToViewportPoint(position);
Vector2 ScreenPosition = new Vector2(
((ViewportPosition.x*canvasRectTransform.sizeDelta.x)-(canvasRectTransform.sizeDelta.x*0.5f)),
((ViewportPosition.y*canvasRectTransform.sizeDelta.y)-(canvasRectTransform.sizeDelta.y*0.5f)));
myRectTransform.localPosition = new Vector2(ScreenPosition.x,ScreenPosition.y);
}
我在OnGUI()
更新中调用这个方法,它工作得很好。当我向左或向右移动摄像机时,伤害弹出框会与光线投射击中的目标保持一致。但是,如果我上下移动相机,弹出框也会随之上下移动,而不会与目标对齐。我尝试使用position
和anchoredPosition
,但它没有工作。
我的画布被设置为屏幕空间覆盖,它被设置为缩放屏幕大小。UI在另一个摄像机中呈现,该摄像机也呈现武器。我尝试将cam变量设置为两个相机,但问题仍然发生。
有人能帮我解决这个问题吗?如有任何帮助,不胜感激。我认为解决这个问题的最好方法是在画布模式下使用世界空间,这样你就可以直接在世界空间上生成弹出窗口(你可能需要为每个弹出窗口使用画布)。