当前位置:   article > 正文

Unity结合HTC Vive开发之射线与UI交互_unity vrtk 射线不显示但是可以点击ui怎么回事

unity vrtk 射线不显示但是可以点击ui怎么回事

完成1.1 VRTK基础配置后,可以进行此步操作。

 

 

交互操作

场景设计

  1. 在场景新建Canvas(画布)(注:第一次在场景中新建,会自动生成一个物体:EventSystem,一定不要删除),以下操作仅用于快速确定Canvas的位置,如有其他更好的办法可采用其他方法:
    1. 将Canvas的Render Mode选项修改为World Space模式;
    2. 将Canvas大小调整为10*10或其他尺寸,将位置全归0;
    3. 由于Canvas是空的,我们需要确定它的位置,可以在它上面添加Image组件,修改默认颜色为红色;
    4. 双击Hierarchy面板的Canvas找到该物体,并将它放置在需要的位置;

image.pngimage.png

  1. 点击Canvas,新建UI->Button,调整Button的相关属性到合适位置(以下仅为本人使用的方法,如有其他更好的可采用其他方法);
    1. 由于新建默认的Button非常大,首先对Button的大小做调整;image.png
    2. 可以看到场景中的Button变圆了,并不是我们想要的效果,可以通过调整Pixels Per Unit Multiplier的数值来进行控制;image.png
    3. 这时候发现Button中原有的文字没了,可以展开Button按钮,点选Text文字,将Horizontal Overflow和Vertical Overflow均调整为Overflow(移除)模式;image.png
    4. 此时,场景中可以看到文字,但是非常模糊,有两个解决办法:
      1. 点选Canvas,修改Dynamic Pixels Per Unit的数值(建议调整到合适大小,文字变清晰后,通过控制文字的缩放来控制文字的显示);image.png
      2. 将文字的字号调整到非常大,然后使用Unity中的缩放对其进行缩放;image.png
    1. 调整Button的位置到合适位置;
    2. 复制一个Button出来;
  1. 新建两个不同的文字;以下为示例:image.png

 

交互设计

  1. 点选右手柄Controller(right),添加组件:VRTK_UIPointer;
  2. 点选Canvas,添加组件:VRTK_UICanvas;
  3. 点选Canvas,添加脚本:ControllerButtonText,双击编写程序
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class ControllerButtonText : MonoBehaviour
  5. {
  6. //定义两个公有物体,在Unity中进行赋值
  7. public GameObject TextOne;
  8. public GameObject TextTwo;
  9. // Start is called before the first frame update
  10. void Start()
  11. {
  12. }
  13. // Update is called once per frame
  14. void Update()
  15. {
  16. }
  17. /// <summary>
  18. /// 当点击One的Button时触发的方法
  19. /// </summary>
  20. public void ClickButtonOne()
  21. {
  22. TextOne.SetActive(true);
  23. TextTwo.SetActive(false);
  24. }
  25. /// <summary>
  26. /// 当点击Two的Button时触发的方法
  27. /// </summary>
  28. public void ClickButtonTwo()
  29. {
  30. //SetActive是用于控制该物体的显示或隐藏的
  31. TextOne.SetActive(false);
  32. TextTwo.SetActive(true);
  33. }
  34. }
  1. 在Unity中完成赋值操作image.png
  2. 对按钮添加事件image.png
    1. 点击红色按钮,添加点击事件;
    2. 将Hierarchy面板的Canvas拖动到Inspector面板的黄色按钮位置;
    3. 点击蓝色按钮,选择创建的脚本->选择指定的方法,对两个按钮分别添加;image.png
    4. 去掉Text和Text(1)两物体的显示image.png
  1. 运行,发现需要按住Touchpad(圆盘)键的同时,点击Trigger(扳指)键才有效果;解决办法:选择右手柄Controller(right),将VRTK——UIPointer组件下的ActivationButton和SelectionButton选项均选择为TouchpadPress,即可实现点击圆盘键触发动作。

 

 

 

问题总结

  1. 将文字调整为Overflow模式后,如有较多文字的话,是不会换行的。解决办法:
    1. 先将HorizontalOverFlow和VerticalOverflow设置为Wrap和Truncate;image.png
    2. 进行调整Text的RectTransform组件下的Width和Height来进行控制(如果场景中找不到文字,可以将这里值调大些);image.png
    3. 调整字号image.png
    4. 场景中看到文字,再调整文本框的宽高来控制换行等image.png
  1. Unity中有一个物体渲染显示的问题:即如果场景中同时存在多个UI(Canvas),且存在多个三维模型(Unity创建的或导入的.FBX模型或从商店导入的任何模型),当自身瞬移到一个边角位置时,会看不到/看不全我们想看到的物体。可以通过将UI层设置为高一层级,实现指定UI始终在其他物体或UI前面(本例暂不实现此功能,仅说明解决办法):
    1. 此处默认是Default层,点击Add Sorting Layer... 创建一个层级,再点击Canvas,将SortingLayer选择为刚创建的层级image.png
    2. 另将Order in Layer值调为1(如果场景中有A、B两个个Canvas,需实现B在底部当背景、A为内容的话,可以将B此值调为1,A值调为2)image.png
  1. 自写的脚本中有一个方法是SetActive,此方法的使用需要在Unity中直接进行赋值,不能使用GameObject.Find("")方式进行查找,本人遇到的问题是使用Find是查找不到去掉显示的物体的;
    1. 如果实在需要控制物体的显示/隐藏,可以通过控制物体的大小、控制物体材质球的显示来控制物体的显示/隐藏。
  1. 自写的脚本中定义的方法需要是Public,否则在Unity中不能选择到image.png

 

 

 

如有错误,欢迎指正


 

本人CSDN链接:大嘴先生

本人邮箱:D_9876@163.com

 

如本文对您有帮助的话,麻烦点个赞

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/146059
推荐阅读
相关标签
  

闽ICP备14008679号