【发布时间】:2022-11-30 18:22:23
【问题描述】:
我试图在 Unity3D VR 项目中始终在播放器面前显示一个 UI,并面对它。我正在使用 Unity 2021.3.5f1。
我有一个简单的 UI:一个 Canvas,里面有一个 Panel 和两个 TextMeshPro。 Canvas 是空游戏对象的子对象,其中包含管理 UI 的脚本。层次结构如下:
我的目标是始终将 UI 显示在玩家面前,面向玩家本身。出于这个原因,我写了这个脚本:
using UnityEngine;
namespace UI
{
public class KpPanelManager : MonoBehaviour
{
[SerializeField] private Transform playerHead;
[SerializeField] private float spawnDistance = 2f;
[SerializeField] private float yOffset = 0f;
[SerializeField] private GameObject panel;
private Vector3 _playerHeadForward;
private void Awake()
{
_playerHeadForward = playerHead.forward;
}
private void Update()
{
// show the panel in front of the player
var position = playerHead.position;
panel.transform.position = position + new Vector3(_playerHeadForward.x, yOffset, _playerHeadForward.z).normalized * spawnDistance;
// rotate the panel to face the player frame by frame
panel.transform.LookAt(new Vector3(position.x, panel.transform.position.y, position.z));
panel.transform.forward *= -1;
}
}
}
然而,它不能正常工作:它正确地在玩家面前,但它在移动时并不跟随玩家的相机本身。在 Unity 编辑器中,我将包含我的 UI 的 Canvas 引用为脚本中的面板 GameObject,并将 XROrigin 的 MainCamera 引用为脚本中的 playerHead Transform。
谁能帮我?
【问题讨论】:
标签: c# unity3d virtual-reality