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

交互操作

场景设计

  1. 在场景新建Canvas(画布)(注:第一次在场景中新建,会自动生成一个物体:EventSystem,一定不要删除),以下操作仅用于快速确定Canvas的位置,如有其他更好的办法可采用其他方法:

    1. 将Canvas的Render Mode选项修改为World Space模式;
    2. 将Canvas大小调整为10*10或其他尺寸,将位置全归0;
    3. 由于Canvas是空的,我们需要确定它的位置,可以在它上面添加Image组件,修改默认颜色为红色;
    4. 双击Hierarchy面板的Canvas找到该物体,并将它放置在需要的位置;

  1. 点击Canvas,新建UI->Button,调整Button的相关属性到合适位置(以下仅为本人使用的方法,如有其他更好的可采用其他方法);

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

交互设计

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

问题总结

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

如有错误,欢迎指正


本人CSDN链接:大嘴先生

本人邮箱:D_9876@163.com

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

Unity结合HTC Vive开发之射线与UI交互相关推荐

  1. Unity结合HTC Vive开发之控制UI始终在视野前方

    完成1.1 VRTK基础配置后再进行本步骤. UI设置 新建UI等内容请点击 1.4 VRTK与UI交互 第一步 场景设计 跟随相机 点击Canvas添加脚本 FollowCamera using S ...

  2. unity HTC vive开发笔记二

    今天来介绍 HTC vive开发之操作GUI 也就是实现手柄对物体的点击 Step 1 安装好我们需要的两个插件之后 删除我们的mainCamera 加入 assets-steamvr-cameraR ...

  3. HTC Vive 开发(一)——VR环境搭建

    VR环境搭建 第一步:创建空的Unity项目,并依此导入 SteamVR 和 VRTK 插件包 (有顺序是因为VRTK是依赖于SteamVR的,顺序颠倒可能会出现error) 第二步:创建空物体并命名 ...

  4. HTC VIVE开发实例教程-邵伟-专题视频课程

    HTC VIVE开发实例教程-1971人已学习 课程介绍         HTC VIVE开发实例视频培训教程,我们相信学习VR技术与学习任何其它技术具有相通性,通过一定的刻意练习,后发现一个方法论和 ...

  5. HTC Vive 开发(二)——VRTK使用

    VRTK使用 参考文档:https://blog.csdn.net/qq_25601345/article/details/78497537?tdsourcetag=s_pcqq_aiomsg#_To ...

  6. 基于Unity的HTC Vive虚拟现实交互开发(一)环境配置

    环境配置 在本篇文章中,我们将重点介绍通过Unity3D来对HTC Vive进行基础的环境配置. 在这个系列的前几篇文章中都是为了之后的开发做准备工作. HTC Vive 进行VR开发的前提是你要有一 ...

  7. unity HTC vive开发笔记一

    一.首先是介绍下HTC手柄. 1.菜单按钮 这个按键没有脚本控制 就是打开个HTC的开关键 2.触控板 即是pad  可触屏 可点击 可以相当于鼠标 和 触摸屏 3.系统按钮 4.状态指示灯 5.Mi ...

  8. HTC VIVE开发教程(一)

    在这一节,我介绍的主要内容有 HTC VIVE的安装与入门 VIVE插件的结构目录 学习VR有一段时间了,在这段时间里我对HTC的vive还有Oculcus都进行过一定的研究,也开发出了几款VR项目, ...

  9. Unity学习 HTC Vive Hi5 2.0

    HTC Vive & Hi5 2.0 灭火器项目指南 软件版本 Unity 2019.4.40f1c1 SDK与教程 Hi5 2.0 SDK下载 官网下载:https://shopcdn.no ...

最新文章

  1. Xilinx 在文档中所用的 LC(logic cells) 与 LUT之间的换算关系
  2. python代码壁纸-python设置windows桌面壁纸的实现代码
  3. 【Avalon】绑定块(监听器):管理每一个绑定
  4. http抓包实战 pdf_实战 Wireshark https 抓包 2, 再抓 Moka 蹭 OurATS 的小尾巴
  5. 宽带和流量是分开的吗_为什么现在的手机套餐与宽带越来越贵,只是因为建设5G吗?...
  6. 618技术特辑(四)疯狂剁手的同时,电商隐私安全你注意到了吗?
  7. win10连接VMWare下的Ubutun系统进行FPT文件传输
  8. html表单实现ajax登陆,node.js+jQuery实现用户登录注册AJAX交互
  9. 1.3 正则表达式和Python语言-1.3.5使用 search()在一个字符串中查找模式(搜索与匹配 的对比)...
  10. Greenplu数据库的部署
  11. linux rtl8188eu ap模式 密码错误 disassoc reason code(8)
  12. 用gambit学博弈论--完全信息动态博弈(一)
  13. wps表格宏被禁用如何解禁_怎么解除宏禁用_win7系统取消宏已被禁用提示的方法...
  14. 扩展欧几里得算法推导
  15. onselect事件在表单元素中的使用
  16. leancloud上传图片js_leanCloud上传多个图片保存到一个数组中的疑惑
  17. 16进制地址编码速算内存容量
  18. marshmallow——快速入门
  19. android 模拟器介绍
  20. 雇佣兵 2021.02.25

热门文章

  1. 可信计算机组成部门的事,一文了解可信计算基(TCB):信息安全的基础
  2. 对《慕课网》分页教程的感悟一
  3. U当家U盘启动盘制作教程
  4. 小学二年级计算机课游戏,小学二年级课堂可玩的小游戏有哪些急拜托了~~
  5. OBS虚拟摄像头使用教程
  6. 腾讯企业邮箱的三大项管理功能
  7. 文献管理软件Mendeley基本使用教程
  8. 掌握树状数组~彻底入门
  9. 模电摸索日记之《差分放大电路》
  10. 安装和配置AMANDA备份服务器