使 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 一些游戏对象。
我想要一个 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 一些游戏对象。