无论是游戏,还是虚拟现实等,都不可能缺少UI界面的制作,对于界面我们可以分为两种UI界面,一种是能够跟随VR头盔移动的UI,另一种为不跟随头盔移动的UI,也就是将UI看作三给空间中的游戏对象。
UGUI的Canvas渲染模式:
第一种:Screen Space - overlay
此模式不需要UI摄像机,UI将永远出现在所以摄像机的最前面,如果想在UI前面显示一个模型或者NPC等游戏对象就不行了,所以VR的UI不适用这种渲染模式
第二种:Screen Space -Camera
从模式是比较适合VR开发的,它需要提供一个摄像机用于渲染UI界面,这种形式我们就可以在UI界面与摄像机之间放置一些游戏对象,可以通过设定渲染摄像机,使用UI跟着头盔进行移动。(你怎样转动UI都会一直出现在视野前方)
第三种:Screen Space - Space
把UI当做3D物体一样的,完全是个3DUI,整个Canvas画布被认定为是一个3D空间中的游戏对象,与创建的其他游戏物体一样,即此模式下的UI不会跟着头盔移动
Unity中UI的交互:
在VR 中的交互通常情况下,会通过手柄发出一条射线,用线来操作UI界面,,,
给玩家看的线条的绘制:有下面几种方式
利用LineReander绘制
3DUI实现
利用Cube缩放
GL库绘制
UI的交互方式:通过手柄发出射线,当射线碰撞到UI元素后,结合手柄的操作,调用相应的方法,,
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//代码挂载到手柄上
public class MyLineTest : MonoBehaviour {
private LineRenderer line; //要画出来的线
private Vector3[] posArray = new Vector3[2]; //射线的起始点
private Ray ray; //真正检测用的射线
private RaycastHit rayHit; //获取射线碰撞信息
private SteamVR_TrackedObject steamvrObj; //获取VR组件引用
private SteamVR_Controller.Device device; //用来接收设备索引
void Start () {
//获取射线组件
line = GetComponent<LineRenderer>();
if (line == null)
{ //没有则添加
line = this.gameObject.AddComponent<LineRenderer>();
}
//设置画出来线的宽度,,(使用户看起来想红外线一样)
line.startWidth = 0.002f;
line.endWidth = 0.002f;
//获取组件上的设备索引,,找到当前连接的设备
steamvrObj = this.GetComponent<SteamVR_TrackedObject>();
device = SteamVR_Controller.Input((int)steamvrObj.index);
}
// Update is called once per frame
void Update () {
//设置起点和终点,起点是手柄的位置,终点是手柄前面100个单位的位置
posArray[0] = this.transform.position;
posArray[1] = this.transform.position.normalized * 100;
//画线使 用户看到
line.SetPositions(posArray);
//创建出射线
ray = new Ray(posArray[0], posArray[1]);
//检测碰撞
if (Physics.Raycast(ray, out rayHit, 100))
{
//按下Trigger键
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
{
//碰撞到Cube
if(rayHit.collider.name == "Cube")
{
Debug.Log("射线碰撞到了Cube"); //这样就可以做交互了
}
}
}
}
}
原文链接:https://blog.csdn.net/Czhenya/article/details/78482914
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
这可能是个愚蠢的问题。但是,我是一个新手......你怎么能在交互式rubyshell中有多行代码?好像你只能有一条长线。按回车键运行代码。无论如何我可以在不运行代码的情况下跳到下一行吗?再次抱歉,如果这是一个愚蠢的问题。谢谢。 最佳答案 这是一个例子:2.1.2:053>a=1=>12.1.2:054>b=2=>22.1.2:055>a+b=>32.1.2:056>ifa>b#Thecode‘if..."startsthedefinitionoftheconditionalstatement.2.1.2:057?>puts"f
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道rubyonrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
我有一个关于多维数组的初学者ruby问题。我想按年份和月份对条目进行排序。所以我想创建一个包含年->月->月条目的多维数组所以数组应该是这样的:2009->08->Entry1->Entry209->Entry32007->10->Entry5现在我有:@years=[]@entries.eachdo|entry|timeobj=Time.parse(entry.created_at.to_s)year=timeobj.strftime("%Y").to_imonth=timeobj.strftime("%m").to_itmparr=[]tmparrentry}@years.pu
我在下面定义了api端点:paramsdorequires:ids,type:Array,desc:'Arrayofgroupids'end我无法从Swagger生成的UI传递数组。如果我输入[1,2,3,4]或ids%5b%5d=1&ids%5b%5d=2&ids%5b%5d=3然后两者都无效.如果我使用数组调用spec中的api,它就可以工作。我的客户想尝试Swagger的整个api,所以我想要一个适用于SwaggerUI的解决方案。 最佳答案 我对所有情况的解决方案:paramsdorequires:ids,type:Arra
问题总结我想尝试使用Ruby来完成我在Python中所做的事情。在Python中它有r"""syntaxtosupportrawstrings,这很好,因为它允许将原始字符串与代码内联,并以更自然的方式连接它们,而无需特殊缩进。在Ruby中,当使用原始字符串时,必须使用其次是EOT在单独的行中,这会破坏代码布局。你可能会问,为什么不使用Ruby的%q{}?嗯,因为%q{}与Python的r"""相比有局限性因为它不会转义多个\\\并且只处理单个\.我正在动态生成Latex代码并写入一个文件,该文件稍后用pdflatex编译。Latex代码包含类似\\\的内容在许多地方。如果我使用Rub
我正在使用Ruby1.8。似乎downcase不会改变非拉丁字符。例如:"Δ".downcase返回“Δ”我知道在Ruby1.9.1及更高版本中,我可以使用UnicodeUtils(fromhere)。我试过了,它工作正常。返回上一个示例的"δ"。是否有适用于1.8Ruby的等效(或任何)解决方案? 最佳答案 nash@nash:~$ruby-vruby1.8.7(2011-02-18patchlevel334)[i686-linux]gem安装unicode(https://rubygems.org/gems/unicode)re
我正在使用Ruby制作一个命令行工具。它将在屏幕上打印大量文本。目前,我正在使用shell管道(may_app|more)来执行此操作。但我认为最好有一个默认的寻呼机。就像你在执行gitlog时看到的一样。可以使用git--nopagerlog禁用寻呼机。我已经完成了大量的谷歌工作并找到了一颗gem:hirb,但似乎有点矫枉过正。经过多次尝试,我目前正在使用shellwrapper来这样做:#!/bin/bash#xray.rbisthecorescript#doingthemainlogicandwill#outputmanyrowsoftexton#screenXRAY=$HOME