【问题标题】:Open GUI on Certain HTC VIVE Controller Angle/Turn在某些 HTC VIVE 控制器角度/转弯上打开 GUI
【发布时间】:2017-01-07 09:48:40
【问题描述】:

我正在尝试为 HTC VIVE 制作 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 执行的操作相同,当我的手角度类似于此图像时它应该打开

【问题讨论】:

  • 请人们帮助我,我真的无法找到适合我需要的任何解决方案
  • 我认为你可以问 Renderer.IsVisible 而不是光线投射,应该更容易。
  • 以下答案不正确,我问的问题不同我不知道为什么人们投票不接受的答案这不是我正在寻找的解决方案,对不起 Stack Community 但是没有帮助

标签: c# unity3d unity5 virtual-reality htc-vive


【解决方案1】:

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

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

注意画布的渲染模式必须是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 是相同的

【讨论】:

  • 我能够实现您在这里告诉我的内容,我的 GUI 很好,但是当我将控制器在我眼前转动 180 度时,我想让它可见/打开(这是我的问题
  • 对不起,我完全误解了你的问题。摄像头是否总是朝向玩家的前方? (仅相对于控制器上下旋转)。如果是这样,则应在相机角度略微向下时打开菜单。是吗?
  • 是相机总是向前看,但旋转不是相对于控制器,而是相机装备,它是相机和控制器的最顶层父级我从控制器投射光线以找到相机角度,当光线击中相机时,我会检查控制器旋转是否与 GUI 出现准确无误
  • 我不知道我是否理解了关系,你能添加一个层次结构的截图吗?
  • 我已经为您应用了编辑,但发生的情况是当我的头是我的手在彼此面前时 GUI 正在打开我以前用我自己的设置做过,但这里的问题是一样的我首先问当我将手/控制器转动到 180 度或一个人看着他的手表以某个角度伸手时打开 GUI 请看这个问题的例子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多