4

我正在尝试为 HTC VIVE 制作一个 GUI,但在某些控制器角度打开它时遇到问题。

我做了一些工作并完成了一些粗略的工作,因为我的对象是一个孩子,这让我很难跟踪它的旋转或位置,因为我希望它仅在控制器处于特定角度时打开(作为一个看着他的人手表)

这是一些视觉示例:

这是我没有 GUI 的控制器轮换: 普通 GUI 关闭

当我旋转控制器时,GUI 应该显示如下内容: 在角度(作为一个看着他的手表的人) GUI 打开

这是我管理的一些代码

   void RayCastFromHead() // is just a  name for Method i am raycasting from a dummy which contains left Grip button
    {
        if (Physics.Raycast(dummy.position, dummy.up, out hitInfo, 30))
        {
             transform.rotation.ToAngleAxis(out tempAngle, out tempAxis);

            if (hitInfo.collider.name.Contains("Camera (eye)"))
            {
                if (dummy.gameObject.GetComponent<MeshRenderer>().enabled)
                {
                        if ((transform.localEulerAngles.z > 270.0f && transform.localEulerAngles.z < 315.0f)&&
                            (transform.position.y > 0.9f && transform.position.y < 2f))

                        {
                            staticRotaion = transform.localRotation;
                            canvasOnHead.GetComponent<TweenScale>().PlayForward();

                        }
                }
            }
        }

    }

我不知道这是做这种任务的正确方法吗?以简单的方式,我想在某些控制器旋转上显示 GUI。

这就是我所说的我的等级制度

这是我的层次结构

这与我想对我的 GUI 执行的操作相同,当我的手角度类似于此图像时它应该打开 在此处输入图像描述

4

1 回答 1

2

有一个简单的解决方案来处理 UI 旋转。

我想您的 GUI 有一个画布。此画布可以是任何对象的子对象。如果您将画布(此菜单的根)添加为左手的子项,则它应该随左手移动和旋转。

注意画布的渲染模式必须是World Space.

这是父母(左手):

在此处输入图像描述

正确设置画布的矩形变换的值(最重要的部分是 pos.z,我改变了画布的比例而不是改变 z。我可以改变画布的宽度和高度,但它会产生不利影响)

在此处输入图像描述

旋转父对象(左手)时,它的行为与您描述的一样:

在此处输入图像描述

编辑

将此脚本添加到您的相机

public class LookAtWatchController : MonoBehaviour
{
    public GameObject menuGUI;
    public GameObject hand;
    void Update(){
          if(transform.eulerAngles.x > 10)
          {
                menuGUI.transform.eulerAngles = new Vector3(transform.eulerAngles.x, 0, 0);
                menuGUI.SetActive(true);
                menuGUI.transform.position = hand.transform.position;
          }
          else{
                menuGUI.SetActive(false);
          }
     }
}

将 gui 菜单分配给menuGUI

将左手分配给hand

您还可以在 menuGUI 旋转中包含手的旋转元素:

menuGUI.transform.eulerAngles = new Vector3(transform.eulerAngles.x, hand.transform.eulerAngles.y, hand.transform.eulerAngles.z);

我还没有对此进行测试,但menuGUI.transform.eulerAngles = new Vector3(transform.eulerAngles.x, 0, 0);也应该可以正常工作。

正如您在下面看到的,当在相机正前方看到画布时,相机和画布的 rotation.eulerAngles.x 是相同的

在此处输入图像描述

在此处输入图像描述

于 2017-01-25T17:28:45.140 回答