2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Unity结合HTC Vive开发之射线与UI交互

Unity结合HTC Vive开发之射线与UI交互

时间:2018-09-15 08:21:11

相关推荐

Unity结合HTC Vive开发之射线与UI交互

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

交互操作

场景设计

在场景新建Canvas(画布)(注:第一次在场景中新建,会自动生成一个物体:EventSystem,一定不要删除),以下操作仅用于快速确定Canvas的位置,如有其他更好的办法可采用其他方法: 将Canvas的Render Mode选项修改为World Space模式;将Canvas大小调整为10*10或其他尺寸,将位置全归0;由于Canvas是空的,我们需要确定它的位置,可以在它上面添加Image组件,修改默认颜色为红色;双击Hierarchy面板的Canvas找到该物体,并将它放置在需要的位置;点击Canvas,新建UI->Button,调整Button的相关属性到合适位置(以下仅为本人使用的方法,如有其他更好的可采用其他方法); 由于新建默认的Button非常大,首先对Button的大小做调整;可以看到场景中的Button变圆了,并不是我们想要的效果,可以通过调整Pixels Per Unit Multiplier的数值来进行控制;这时候发现Button中原有的文字没了,可以展开Button按钮,点选Text文字,将Horizontal Overflow和Vertical Overflow均调整为Overflow(移除)模式;此时,场景中可以看到文字,但是非常模糊,有两个解决办法: 点选Canvas,修改Dynamic Pixels Per Unit的数值(建议调整到合适大小,文字变清晰后,通过控制文字的缩放来控制文字的显示);将文字的字号调整到非常大,然后使用Unity中的缩放对其进行缩放; 调整Button的位置到合适位置;复制一个Button出来;新建两个不同的文字;以下为示例:

交互设计

点选右手柄Controller(right),添加组件:VRTK_UIPointer;点选Canvas,添加组件:VRTK_UICanvas;点选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);}}

在Unity中完成赋值操作对按钮添加事件 点击红色按钮,添加点击事件;将Hierarchy面板的Canvas拖动到Inspector面板的黄色按钮位置;点击蓝色按钮,选择创建的脚本->选择指定的方法,对两个按钮分别添加;去掉Text和Text(1)两物体的显示运行,发现需要按住Touchpad(圆盘)键的同时,点击Trigger(扳指)键才有效果;解决办法:选择右手柄Controller(right),将VRTK——UIPointer组件下的ActivationButton和SelectionButton选项均选择为TouchpadPress,即可实现点击圆盘键触发动作。

问题总结

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

如有错误,欢迎指正

本人CSDN链接:大嘴先生

本人邮箱:D_9876@

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。