加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在某些HTC VIVE Con??troller Angle / Turn上打开GUI

发布时间:2020-12-15 22:41:05 所属栏目:百科 来源:网络整理
导读:我正在尝试为HTC VIVE制作一个GUI,但是在某个控制器角度打开它时遇到了麻烦. 我已经完成了一些工作并且有点粗略,因为我的对象是一个孩子,这让我很难跟踪它的旋转或位置,因为我希望它只在控制器处于特定角度时打开(作为一个看着他的人)看) 这是一些视觉示例:
我正在尝试为HTC VIVE制作一个GUI,但是在某个控制器角度打开它时遇到了麻烦.

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

这是一些视觉示例:

这是我没有GUI的控制器旋转:

Normal GUI closed

当我旋转控制器时,GUI应显示如下内容:

at angle (as a guy looking at his watch) GUI Open

这是我管理的一些代码

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.

这是我所说的层次结构

This is My hierarchy

这是我想用我的GUI做它同样应该打开时,我的手角度就像这个图像

enter image description here

解决方法

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

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

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

这是父母(左手):

enter image description here

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

enter image description here

它会像你在旋转父对象时所描述的那样(左手):

enter image description here

编辑

将此脚本添加到相机

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);
                menuGUI.SetActive(true);
                menuGUI.transform.position = hand.transform.position;
          }
          else{
                menuGUI.SetActive(false);
          }
     }
}

将gui菜单分配给menuGUI

将左手分配到手

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

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

我还没有测试过这个,但是菜单GUI.transform.eulerAngles = new Vector3(transform.eulerAngles.x,0);也应该工作正常.

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

enter image description here

enter image description here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读