使 Canvas 跟随相机

Make Canvas to follow the camera

我想要一个 UI canvas 来跟随相机,这样它就会始终在头部前面,并且可以像 VR 菜单一样进行交互。我正在使用以下代码来这样做。

public class FollowMe : MonoBehaviour
{
    public GameObject menuCanvas;
    public Camera FirstPersonCamera;
    [Range(0, 1)]
    public float smoothFactor = 0.5f;

// how far to stay away fromt he center

    public float offsetRadius   = 0.3f;
    public float distanceToHead = 4;

    public  void Update()
    {
        // make the UI always face towards the camera
        menuCanvas.transform.rotation = FirstPersonCamera.transform.rotation;

        var cameraCenter = FirstPersonCamera.transform.position + FirstPersonCamera.transform.forward * distanceToHead;

        var currentPos = menuCanvas.transform.position;

        // in which direction from the center?
        var direction = currentPos - cameraCenter;

        // target is in the same direction but offsetRadius
        // from the center
        var targetPosition = cameraCenter + direction.normalized * offsetRadius;

        // finally interpolate towards this position
        menuCanvas.transform.position = Vector3.Lerp(currentPos, targetPosition, smoothFactor);
    }
}

不幸的是,canvas 在相机前面闪烁并且没有正确定位。如何让菜单跟随相机?|

如果没有理由反对,您可以使用 ScreenSpace - Camera canvas,如 in the docs 所述。然后您可以将您的 FPS 相机引用为 canvas.

的渲染相机

执行此操作的简单方法是使用屏幕 Space - 您可以从 Canvas 组件和渲染模式属性中设置的相机模式。

第二种方式,如果你想更多地控制你的 canvas 应该如何表现,那么你可以使用 Canvas 渲染模式 - "World Space" 然后使用你可以处理的脚本 canvas 一些游戏对象。