【问题标题】:Make Canvas to follow the camera使画布跟随相机
【发布时间】:2020-05-21 11:09:58
【问题描述】:

我想要一个 UI 画布跟随相机,这样它就始终在头前,并且像 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);
    }
}

很遗憾,画布在相机前方闪烁,并且位置不正确。如何让菜单跟随相机?|

【问题讨论】:

    标签: c# unity3d user-interface menu virtual-reality


    【解决方案1】:

    如果没有理由反对它,您可以使用ScreenSpace - Camera 画布,如in the docs 所述。然后你可以引用你的 FPS 相机作为画布的渲染相机。

    【讨论】:

    • 不幸的是它必须在世界空间中,因为它必须跟随玩家
    • 是否可以选择让画布成为层次结构中玩家游戏对象的子对象,然后将其偏移到您希望它跟随的任何位置?
    • 我创建了一个空的游戏对象。菜单画布是玩家游戏对象的子对象。该脚本附加到玩家游戏对象,但我仍然无法获得确切的转换; :(
    • 请澄清> 我无法得到确切的转换。还有什么是空的游戏对象?您能否编辑您的问题以包含游戏对象层次结构?
    【解决方案2】:

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

    第二种方式,如果您想更好地控制画布的行为方式,则可以使用画布渲染模式 - “世界空间”,然后使用脚本处理画布和一些游戏对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2016-02-24
      • 1970-01-01
      • 2022-10-04
      • 2022-01-23
      • 2017-08-13
      相关资源
      最近更新 更多