You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VR画布Billboard效果Z轴翻转180度问题修复求助

解决VR画布Billboard仅沿Y轴跟随时的Z轴翻转问题

你的问题出在当前代码使用相机的完整forward向量进行LookAt,当绕到物体背后时,物体会为了朝向相机的forward方向而翻转Z轴,导致画布倒置。要实现仅沿Y轴(水平方向)跟随的Billboard效果,需要限制旋转仅作用于Y轴,避免Z轴翻转。

方案一:基于相机水平位置的朝向(推荐)

这种方式让画布始终看向相机的水平位置,忽略垂直高度差,保持自身上下方向不变:

public class Billboard : MonoBehaviour
{
    /*Ce script sert a creer un effet billboard sur nos texte, alors il suiveront la camera du joueur*/
    public Camera _playerCamera;

    private void FixedUpdate()
    {
        // 计算相机与物体的水平方向向量,移除Y轴分量
        Vector3 horizontalDirection = _playerCamera.transform.position - transform.position;
        horizontalDirection.y = 0;

        // 避免相机与物体位置重合时的异常
        if (horizontalDirection.sqrMagnitude > 0.01f)
        {
            // 让物体朝向水平方向,保持世界Y轴为向上方向
            transform.rotation = Quaternion.LookRotation(horizontalDirection, Vector3.up);
        }
    }
}

方案二:直接继承相机的Y轴旋转

如果需要画布和相机保持完全一致的水平转向(比如玩家转头时画布同步转向),可以直接提取相机的Y轴欧拉角:

public class Billboard : MonoBehaviour
{
    /*Ce script sert a creer un effet billboard sur nos texte, alors il suiveront la camera du joueur*/
    public Camera _playerCamera;

    private void FixedUpdate()
    {
        // 仅应用相机的Y轴旋转到物体上
        Quaternion targetRotation = Quaternion.Euler(0, _playerCamera.transform.eulerAngles.y, 0);
        transform.rotation = targetRotation;
    }
}

原代码问题解析

原代码中transform.LookAt(transform.position + _playerCamera.transform.rotation * Vector3.forward, ...)的逻辑是让物体朝向相机的正前方方向。当你绕到画布背后时,相机的forward方向指向画布的反方向,物体为了LookAt这个目标点,会自动翻转Z轴来保持正面朝向,最终导致画布倒置。通过限制旋转仅作用于Y轴,就能避免这种翻转问题。

内容的提问来源于stack exchange,提问作者Derpling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:56:50